如何对请求中的数据进行排序和分组?
How to sort and group data in request?
我有 table.
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
中有一些重复。我只需要 select 来自这个 table 的最新记录进行处理。
换句话说,我需要:
- 按
purchaseNumber
对元素进行分组
- 按
docPublishDate
和 select 最新排序。
- 如果组中的任何元素具有状态
parsing_status
true
(假设它是第 2 步中的最新元素)任何元素都不应该 returned。
处理后 parsing_status
标志更改为 true
。
docPublishDate
- 时间戳
如果最后处理了一个最新的项目,则不应 select 编辑具有旧日期的项目。
我试着做一些分组。但是代码只是 return 我的所有数据:
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
您可以按如下方式使用NOT EXISTS
:
SELECT * FROM YOUR_TABLE T
WHERE NOT EXISTS (SELECT 1 FROM YOUR_TABLE TT
WHERE T.PURCHASENUMBER = TT.PURCHASENUMBER
AND (TT.DOCPUBLISHDATE > T.DOC_PUBLISHDATE
OR T.PARSINGSTATUS = 'true') );
我了解到您想要每次购买的最新行,解析状态为 true 的行除外。一种选择是在子查询中使用 distinct on
来获取最新的元素,然后在外部查询中进行过滤:
select *
from (
select distinct on (purchasenumber) x.*
from xml_files x
order by purchasenumber, docpublishdate desc
) x
where parsing_status is distinct from true
我有 table.
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
中有一些重复。我只需要 select 来自这个 table 的最新记录进行处理。
换句话说,我需要:
- 按
purchaseNumber
对元素进行分组
- 按
docPublishDate
和 select 最新排序。 - 如果组中的任何元素具有状态
parsing_status
true
(假设它是第 2 步中的最新元素)任何元素都不应该 returned。
处理后 parsing_status
标志更改为 true
。
docPublishDate
- 时间戳
如果最后处理了一个最新的项目,则不应 select 编辑具有旧日期的项目。 我试着做一些分组。但是代码只是 return 我的所有数据:
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
您可以按如下方式使用NOT EXISTS
:
SELECT * FROM YOUR_TABLE T
WHERE NOT EXISTS (SELECT 1 FROM YOUR_TABLE TT
WHERE T.PURCHASENUMBER = TT.PURCHASENUMBER
AND (TT.DOCPUBLISHDATE > T.DOC_PUBLISHDATE
OR T.PARSINGSTATUS = 'true') );
我了解到您想要每次购买的最新行,解析状态为 true 的行除外。一种选择是在子查询中使用 distinct on
来获取最新的元素,然后在外部查询中进行过滤:
select *
from (
select distinct on (purchasenumber) x.*
from xml_files x
order by purchasenumber, docpublishdate desc
) x
where parsing_status is distinct from true