我目前正在制作一张跟踪租金金额和物业租约到期日的表格。我设置表格的方式是,无论何时更新租金金额或到期日期,都会向表中添加新行,并仅更新已更改的值。未更改的值在新行中保留NULL
。通过这种方式,我可以跟踪谁在何时进行了更改。
我想要做的是根据输入的日期(或ID,如果日期完全相同)获取最新值,但是对于每列。我不确定我是否可以使用一个查询完成此操作。
我的表与此类似:
ID | Lease ID | Rent Amount | Due Date | Enter Date
------------------------------------------------------------
1 | 50019 | 900.00 | NULL | 2017-04-01 01:00:00
2 | 50019 | 875.00 | NULL | 2017-04-01 01:00:00
3 | 50020 | NULL | 2 | 2017-04-02 02:00:00
4 | 50021 | 750.00 | 1 | 2017-04-03 03:00:00
5 | 50019 | NULL | 1 | 2017-04-04 04:00:00
我希望得到以下结果:
Lease ID | Rent Amount | Due Date
---------------------------------
50019 | 875.00 | 1
50020 | NULL | 2
50021 | 750.00 | 1
基本上,对于每个租赁ID,我会获取绝对最新租金金额,其中值不是NULL
(如果没有值,将返回NULL
),并且与到期日期相同。这可以使用一个查询完成吗?
我坚持这个想法。所以,不幸的是,我自己也没有任何疑问。如果我拿出任何东西,我会在下面添加它。
谢谢。
答案 0 :(得分:1)
您可以使用相关子查询来获取所需的值:
SELECT LeaseID,
(SELECT RentAmount
FROM mytable AS t2
WHERE t1.LeaseID = t2.LeaseID AND RentAmount IS NOT NULL
ORDER BY EnterDate DESC, ID DESC LIMIT 1) AS RentAmount,
(SELECT DueDate
FROM mytable AS t2
WHERE t1.LeaseID = t2.LeaseID AND DueDate IS NOT NULL
ORDER BY EnterDate DESC, ID DESC LIMIT 1) AS DueDate
FROM (
SELECT DISTINCT LeaseID
FROM mytable) AS t1;