Sql 从postgres中的同一组中选择最早和最近的日期
我想使用postgresql从同一组区域的其他人那里获得一个最早和最近的日期。 我汇总后得到了下表,但下一步就失败了Sql 从postgres中的同一组中选择最早和最近的日期,sql,postgresql,date,Sql,Postgresql,Date,我想使用postgresql从同一组区域的其他人那里获得一个最早和最近的日期。 我汇总后得到了下表,但下一步就失败了 SELECT string_agg(id, ';') AS ids, region, STRING_AGG(to_char(date1, 'YYYY-MM-DD'),';') AS dates FROM table1 GROUP BY region +---------+--------+-------------------------------------------
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 |
+----+--------+------------+----------------+
您可以这样做:
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;
工作使用滞后
请检查我的答案,如果它对您有帮助,请接受它,或者为给定的解决方案提供相关的反馈意见。请阅读:stackoverflow.com/help/someone-answers了解它的重要性。
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;
SELECT id
,region
,date1
,LAG(date1) OVER (
PARTITION BY REGION ORDER BY ID
) AS neareast_early
FROM table1;