【发布时间】:2021-03-21 17:31:28
【问题描述】:
我有桌子。
ID section_name purchaseNumber docPublishDate parsing_status
88940 notifications 0373200124515000035 2015-02-27 null
88939 notifications 0373200124515000035 2015-02-29 null
88938 notifications 0373200124515000034 2015-02-27 null
88687 notifications 0373100064615000120 2015-02-28 null
88937 notifications 0373100064615000120 2015-02-27 null
89122 notifications 0373100064615000120 2015-02-27 null
88936 notifications 0373200124515000032 2015-02-27 null
88988 notifications 0373100064615000120 2015-03-02 null
88696 notifications 0373100066915000038 2015-02-27 null
88963 notifications 0373200174515000013 2015-02-27 null
它在purchaseNumber 中有一些重复项。我只需要从这个表中选择最新的记录进行处理。
换句话说,我需要:
- 按
purchaseNumber对元素进行分组 - 按
docPublishDate对它们进行排序并选择最新的。 - 如果组中的任何元素的状态为
parsing_statustrue(假设它是第 2 步中最新的),则不应返回任何元素。
处理后parsing_status 标志变为true。
docPublishDate - 时间戳
如果最后一个最新的项目被处理,则不应选择具有旧日期的项目。 我试着做一些分组。但是代码只是简单地将所有数据返回给我:
SELECT
"id", "section_name", "purchaseNumber", "docPublishDate", "parsing_status"
FROM "xml_files" WHERE parsing_status IS NULL GROUP BY "purchaseNumber", "id", "section_name", "docPublishDate", "parsing_status" ORDER BY "docPublishDate" DESC
【问题讨论】:
-
目前还不清楚你想要什么结果。在您的示例数据中,所有行在
parsing_status列中都有null值:您的查询不会返回任何行。请提供具有代表性的样本数据以及您想要的结果。 -
@GMB,我在帖子中添加了更多解释。和固定的桌子。
-
你能不能也分享一下预期的结果。
标签: sql postgresql datetime subquery greatest-n-per-group