查找最高(最大)日期查询,然后从上一个查询的结果中找到最高值



这是一个称为 packages的表:

id  packages_sent    date         sent_order
1 | 10             | 2017-02-11 | 1
2 | 25             | 2017-03-15 | 1
3 | 5              | 2017-04-08 | 1
4 | 20             | 2017-05-21 | 1
5 | 25             | 2017-05-21 | 2
6 | 5              | 2017-06-19 | 1

此表显示给定日期发送的软件包数量;如果在同一日期发送多个软件包(与第4行和第5行一样),则sent_order跟踪他们发送的顺序。

我正在尝试进行一个查询,以给定以下条件返回sum(packages_sent):首先,使用max(date)返回行(给定的一些日期),其次,如果有多个行带有相同max(date)的行,请返回行使用max(send_order)(最高的send_order值)。

这是我到目前为止的查询:

SELECT sum(packages_sent)
FROM packages 
WHERE date IN
    (SELECT max(date)
    FROM packages
    WHERE date <= '2017-05-29');

此查询正确找到最大日期,即2017-05-21,但是对于sum,它返回45,因为它将行添加45

我希望查询返回max(date),如果有多个行具有相同的max(date)然后max(sent_order)返回行。使用上面的示例与日期2017-05-29,它仅应返回25

我看不到sum()在哪里发挥作用。您似乎只想要最后一行:

select p.*
from packages p
order by date desc, sendorder desc
fetch first 1 row only;

如果您在显示时确实有序上升,则使用替代密钥ID字段更容易。

SELECT packages_sent
 FROM packages 
WHERE ID = 
  (SELECT max(ID)
    FROM packages
    WHERE date <= '2017-05-29');

由于ID始终随日期增加并发送订单找到最大的订单,也找到了另外两个步骤的最大值。

最新更新