SQL - 如何获取创建的同一日期的最新数据

Posted

技术标签:

【中文标题】SQL - 如何获取创建的同一日期的最新数据【英文标题】:SQL - How to get newest data of same date created 【发布时间】:2017-04-06 21:52:30 【问题描述】:

我有带有上传日期字段的表格图像。如果同一天上传了 2 张或更多图片,我如何获得最新的图片。

1.我们检查小时、分钟或秒。

2.如果H:M:S相同,检查插入ID的顺序。

ID |     URL    |           create           |
1  |   01.jpg   |     2017-02-23 10:24:41    |<<same H:M:s
2  |   02.jpg   |     2017-02-23 10:24:41    |<<same H:M:s
3  |   03.jpg   |     2017-02-23 10:50:00    |<<same H
4  |   04.jpg   |     2017-02-24 21:50:00    |<<others
5  |   05.jpg   |     2017-03-28 17:50:00    |<<others

输出:我只想得到

3  |   03.jpg   |     2017-02-23 10:50:00    |<< newer than 1, 2
4  |   04.jpg   |     2017-02-24 21:50:00    |
5  |   05.jpg   |     2017-03-28 17:50:00    |

【问题讨论】:

【参考方案1】:

要获取给定日期具有最大时间戳的所有行,请使用

select created,max(id) maxid
from (select t1.*,(select count(distinct created) from t 
                   where created >=t1.created 
                   and cast(created as date)=cast(t1.created as date)) rn
       from t t1) x
     where rn=1

如果可以在最新的时间戳上存在关联,并且在这种情况下只需要最新的 id,则可以将上述查询扩展到以下内容。

select y.maxid id,t.url,t.created 
from (
     select created,max(id) maxid
     from (select t1.*,(select count(distinct created) from t 
                        where created >=t1.created 
                        and cast(created as date)=cast(t1.created as date)) rn
           from t t1) x
     where rn=1
     group by created
) y 
join t on t.id=y.maxid and t.created=y.created

【讨论】:

哦...我以前没见过这个。但是我在哪里可以将 table_name 放入查询中? 用你的表名替换任何你看到的 t 哦,我已经成功运行了你的查询....但是应用到我的项目中非常困难。我使用 Cakephp 来构建查询。有了这个,我害怕对我来说太难了。无论如何感谢您的帮助。 (Y) ID 列似乎是主键自增列。如果是这样,那么我认为假设它按顺序遵循时间戳应该是安全的。【参考方案2】:
SELECT t1.*
FROM yourTable t1
INNER JOIN
(
    SELECT MAX(create) AS latest, MAX(ID) AS maxID
    FROM yourTable
    GROUP BY DATE(create)
) t2
    ON t1.create = t2.latest AND
       t1.ID     = t2.maxID

【讨论】:

也许添加一个条件来处理具有最大创建的多行。在这种情况下,操作只需要最大 id。 感谢您的建议,但结果是一样的。记录仍然全选。这是我的查询SELECT UP.* FROM user_pictures UP INNER JOIN ( SELECT MAX(created) AS latest FROM user_pictures GROUP BY DATE(created) ) UP2 ON UP.created = UP2.latest @vkp 我已经添加了这个逻辑 太棒了。通过您的更新,我已经成功获得了我想要的数据。感谢您的帮助。 @TommyDo .. 您应该知道,如果给定日期的最新时间戳没有最大 id,则此查询不会给您预期的结果。【参考方案3】:

使用ORDER BYLIMIT 怎么样?

SELECT *
FROM Images
ORDER BY create DESC, ID DESC
LIMIT 1

ORDER by 按创建排序图像,然后是 ID。限制只选择 1。这应该只选择最新的照片。

【讨论】:

ORDER BY 只需按您想要的字段对数据进行排序。它将选择所有数据。我认为@Tim Biegeleisen 的回答是正确的。 我实际上刚刚发现您每天需要 1 条记录。

以上是关于SQL - 如何获取创建的同一日期的最新数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server:从最大日期/最新日期的记录中获取数据

如何在 apache spark 中读取最新的分区

如何获取重复 usid 的特定日期范围的最新数据

使用SQL查询物料最新采购价格的示例

sql如何获取数据库中最新的数据

如何使用一段时间优化 SQL 查询(在同一个表中获取和添加数据)?