【问题标题】:Choose an early and nearest date from same group in postgres从 postgres 中的同一组中选择一个早期和最近的日期
【发布时间】:2018-08-08 16:57:29
【问题描述】:

我想使用 postgresql 从同一组(区域)中的其他人那里获得一个早期和最近的日期。

    +----+--------+------------+
    | id | region |    date1   |
    +----+--------+------------+
    |  1 | a      | 2017-01-01 |
    |  2 | a      | 2017-01-07 |
    |  3 | a      | 2017-03-03 |
    |  4 | a      | 2017-04-03 |
    |  5 | b      | 2017-02-02 |
    |  6 | b      | 2017-02-28 |
    +----+--------+------------+

我汇总并得到了一个下表,但失去了下一步。

SELECT string_agg(id, ';') AS ids, region, 
STRING_AGG(to_char(date1, 'YYYY-MM-DD'),';') AS dates
FROM table1
GROUP BY region

+---------+--------+---------------------------------------------+
|   ids   | region |                    dates                    |
+---------+--------+---------------------------------------------+
| 1;2;3;4 | a      | 2017-01-01;2017-01-07;2017-03-03;2017-04-03 |
| 5;6     | b      | 2017-02-02;2017-02-28                       |
+---------+--------+---------------------------------------------+

这里我不知道如何构造下表。

+----+--------+------------+----------------+
| id | region |   date1    | neareast_early |
+----+--------+------------+----------------+
|  1 | a      | 2017-01-01 |                |
|  2 | a      | 2017-01-07 | 2017-01-01     |
|  3 | a      | 2017-03-03 | 2017-01-07     |
|  4 | a      | 2017-04-03 | 2017-03-03     |
|  5 | b      | 2017-02-02 |                |
|  6 | b      | 2017-02-28 | 2017-02-02     |
+----+--------+------------+----------------+

【问题讨论】:

  • 请检查我的回答,如果它对您有帮助,请接受它或为给定的解决方案提供相关反馈(cmets)。请阅读:stackoverflow.com/help/someone-answers 以了解为什么它很重要。

标签: sql postgresql date


【解决方案1】:

你可以这样做:

SELECT a.*, IFNULL((SELECT b.date1 FROM table1 b WHERE b.date1 < a.date1 AND a.region = b.region ORDER BY b.date1 DESC LIMIT 1), "") AS neareast_early FROM table1 a;

工作fiddle

【讨论】:

    【解决方案2】:

    使用LAG

    SELECT id
        ,region
        ,date1
        ,LAG(date1) OVER (
            PARTITION BY REGION ORDER BY ID
            ) AS neareast_early
    FROM table1;
    

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2017-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      相关资源
      最近更新 更多