postgresql 如何选择最小日期而不是最大日期

utugiqy6  于 2022-11-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(143)

你好,我想在表格中选择最小日期而不是最大日期。我想选择第四个事件的日期而不是最大日期。有什么建议吗?
| 用户名|事件|日期|
| - -|- -|- -|
| 某某|一个|2021年6月6日|
| 某某|2个|2021年6月26日|
| 某某|三个|2021年7月30日|
| 某某|四个|2022年1月10日|
| 某某|五个|2022年2月14日|
| 某某|六个|2022年2月21日|
我试着这样做:

select user, min(date), max(date) from table
where event <= 4
group by user

谢谢

xzv2uavs

xzv2uavs1#

当前解决方案的一个替代方案使用聚合:

SELECT
    "user",
    MIN(date) AS min_date,
    MIN(date) FILTER (WHERE event = 4) AS fourth_date
FROM yourTable
GROUP BY "user";

对于一个更通用的解决方案,我们可以使用RANK()沿着一个透视查询:

WITH cte AS (
    SELECT *, RANK() OVER (PARTITION BY "user" ORDER BY date) rnk
    FROM yourTable
)

SELECT
    "user",
    MAX(date) FILTER (WHERE rnk = 1) AS min_date,
    MAX(date) FILTER (WHERE rnk = 4) AS fourth_date
FROM cte
GROUP BY "user";

根据所需的连接行为,使用DENSE_RANK()ROW_NUMBER()而不是RANK()可能会有意义。

zbdgwd5y

zbdgwd5y2#

您可以对不受WHERE影响的零件使用子查询。

SELECT user, date, (SELECT MIN(date) FROM one) 
FROM one 
WHERE event=4;

相关问题