如何将表中每列的最大值作为一行?

时间:2017-04-27 18:30:27

标签: mysql

我目前正在制作一张跟踪租金金额和物业租约到期日的表格。我设置表格的方式是,无论何时更新租金金额或到期日期,都会向表中添加新行,并仅更新已更改的值。未更改的值在新行中保留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),并且与到期日期相同。这可以使用一个查询完成吗?

我坚持这个想法。所以,不幸的是,我自己也没有任何疑问。如果我拿出任何东西,我会在下面添加它。

谢谢。

1 个答案:

答案 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;

Demo here