gpt4 book ai didi

Postgresql - 如果满足条件,则将行减少为一个

转载 作者:行者123 更新时间:2023-11-29 13:22:19 26 4
gpt4 key购买 nike

我有一个返回一系列对象的表。这是示例结果的一小部分(JSON 格式):

查询:

SELECT id, starttime, endtime, duration, type FROM things

结果:

{
"id": 3,
"starttime": "2016-09-15T03:27:09",
"endtime": "2016-09-15T03:31:43",
"duration": 274,
"type": "bad"
},
{
"id": 2,
"starttime": "2016-09-15T03:26:48",
"endtime": "2016-09-15T03:27:09",
"duration": 20,
"status": "good"
},
{
"id": 1,
"starttime": "2016-09-15T03:19:46",
"endtime": "2016-09-15T03:26:48",
"duration": 422,
"status": "bad"
},

我试图排除任何少于 30 秒的内容 - 这很简单。但是,我还需要将前两个组合在一起 - 它们的持续时间组合在一起,starttime 与 id 1 的 starttimeendttime 作为 id 3 的 结束时间。所以这个:

{
"starttime": "2016-09-15T03:19:46",
"endtime": "2016-09-15T03:31:43",
"duration": 696,
"status": "bad"
},

这在 Postgres/SQL 中可行吗?我想我可以用 Java/C# 解决问题,但更愿意在查询中解决。

最佳答案

您可以使用 ROW_NUMBER() :

SELECT MAX(CASE WHEN s.rnk = 1 THEN s.starttime END) as starttime,
MAX(CASE WHEN s.rnk = 2 THEN s.endtime END) as endtime,
SUM(s.duration) as dur,
--You didn't say which status you want
FROM (
SELECT t.*,
ROW_NUMBER() OVER(ORDER BY t.id) as rnk
FROM things t
WHERE t.duration >= 30) s
WHERE s.rnk < 3

关于Postgresql - 如果满足条件,则将行减少为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39512650/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com