我有一个 mysql 表 (file_ payments) 来保存文件中包含的付款记录,如下所示
ID FILE START_DATE END_DATE NO_PAYMTS
-- ----- ---------- ---------- ---------
1 file1 2013-10-11 2013-10-15 6
2 file2 2013-10-16 2013-10-20 10
Run Code Online (Sandbox Code Playgroud)
然后我有另一个表(付款),其中包含有关此付款的更多详细信息
ID DATE AMOUNT BANK
--- ---------- ---------- ----
1 2013-10-11 100.00 3
2 2013-10-12 500.00 3
3 2013-10-13 400.00 2
4 2013-10-15 200.00 2
5 2013-10-16 400.00 4
6 2013-10-18 300.00 1
7 2013-10-19 700.00 3
Run Code Online (Sandbox Code Playgroud)
我需要关联两个表以验证第一个表中的NO_PAYMTS是否与第二个表中的实际付款数相对应,因此我正在考虑计算第二个表中第一个表中START_DATE和END_DATE之间的记录。本例中预期的输出是:
START_DATE END_DATE NO_PAYMTS ACTUAL_PAYMTS
---------- ---------- --------- -------------
2013-10-11 2013-10-15 6 4
2013-10-16 2013-10-20 10 3
Run Code Online (Sandbox Code Playgroud)
我很困惑如何进行查询,但可能是这样的:
从 file_ payments WHERE () 中选择 ID、FILE、START_DATE、END_DATE、NO_PAYMTS
显然这不起作用,因为 WHERE 子句中没有连接表的条件,我怎样才能使它起作用?
询问:
SELECT t1.ID,
t1.FILE,
t1.START_DATE,
t1.END_DATE,
t1.NO_PAYMTS,
(SELECT COUNT(*)
FROM Table2 t2
WHERE t2.DATE >= t1.START_DATE
AND t2.DATE <= t1.END_DATE ) AS ACTUAL_PAYMTS
FROM Table1 t1
Run Code Online (Sandbox Code Playgroud)
结果:
| ID | FILE | START_DATE | END_DATE | NO_PAYMTS | ACTUAL_PAYMTS |
|----|-------|------------|------------|-----------|---------------|
| 1 | file1 | 2013-10-11 | 2013-10-15 | 6 | 4 |
| 2 | file2 | 2013-10-16 | 2013-10-20 | 10 | 3 |
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7132 次 |
| 最近记录: |