gpt4 book ai didi

mysql - 获取最新记录

转载 作者:行者123 更新时间:2023-11-29 12:50:57 24 4
gpt4 key购买 nike

我想根据日期字段选择表格中的最新行。

应删除最新日期。然而,问题是,如果日期为 NULL,则应优先于任何 max(end_date)。

我得到的最接近的是如下:

SELECT id, status_id
FROM
contacts AS cc
INNER JOIN
statuses AS s ON (s.id = cc.id)
INNER JOIN (
SELECT id, max(end_date) as max_end_date FROM statuses
GROUP BY id
) s2 ON s2.max_end_date = s.end_date AND s2.id = s.id

如果我有如下两行,则此方法有效:

id     end_date
1 2014-06-02
2 2015-06-02

它应该提取 end_date 为“2015-06-02”的行 - 它执行正确。

但是,如果行是这样的,则不起作用:

id    end_date
1 2014-06-02
2 NULL

它应该返回结束日期为 NULL 的行。

如有任何帮助,我们将不胜感激,谢谢。

最佳答案

因此,您所要求的困难在于您试图查看表是否有空值以及max(end_date) 是什么。这本质上是两个截然不同的问题。这些问题的解决方式通常非常不同,因为找到一个问题的效率与找到另一个问题的效率不同。

我通常使用的方法基本上是不可能的,因为它们会在同一个表上添加另一个内部联接。这对于效率来说并不是很好。相反,我认为这个查询将满足您的需要:

SELECT id, status_id
FROM
contacts AS cc
INNER JOIN
statuses AS s ON (s.id = cc.id)
INNER JOIN (
SELECT id, max(end_date) as max_end_date, sum(isnull(end_date)) as nullcount
FROM statuses
GROUP BY id
) s2 ON case when nullcount > 0
Then null
else s2.max_end_date end = s.end_date
AND s2.id = s.id

这个查询很奇怪,但它可以让你判断是否有空值。在我们查找 max(end_date) 的同时,此查询对空值数量进行求和。如果 end_date 为 null,则 isnull 将返回 1;如果 end_date 不为 null,则返回 0,因此如果我们将这些整数相加,结果应该是 id 在 end_date 中的 null 数。

那么,连接条件是一个case语句。如果 null 的数量大于 0,我们将使用 null 作为 end_date 值。否则,我们将使用子查询返回的最大值。

关于mysql - 获取最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24730912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com