如何对请求中的数据进行排序和分组?

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 的最新记录进行处理。 换句话说,我需要:

  1. purchaseNumber
  2. 对元素进行分组
  3. docPublishDate 和 select 最新排序。
  4. 如果组中的任何元素具有状态 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