gpt4 book ai didi

sql - 选择具有混合值的 N 行

转载 作者:行者123 更新时间:2023-11-29 12:44:23 25 4
gpt4 key购买 nike

我有一个表格,其中包含如下列

insertTimeStamp, port, data
1 , 20 , 'aaa'
2 , 20 , 'aba'
3 , 20 , '3aa'
4 , 20 , 'aab'
2 , 21 , 'aza'
5 , 21 , 'aha'
8 , 21 , 'aaa'
15 , 22 , '2aa'

现在我需要该表中的 N 行(比如 4),按 insertTimeStamp 升序排列。但如果可能的话,我想从不同的 port 获取它们。

所以结果应该是:

1              , 20  , 'aaa'
2 , 20 , 'aba'
2 , 21 , 'aza'
15 , 22 , '2aa'

如果 port 中没有足够的不同值,我想选择剩余的具有最低 insertTimeStamp 的值。

最佳答案

SQL Fiddle Demo

如您所见,我创建了一个 group_id,因此 group_id = 1 将是每个端口的较小的 TimeStamp

第二个字段是 time_id 所以在 ORDER BY 中我选择所有 1 后带上所有 2,3, 4 用于任何端口。

   SELECT *
FROM (
SELECT *,
row_number() over (partition by "port" order by "insertTimeStamp") group_id,
row_number() over (order by "insertTimeStamp") time_id
FROM Table1 T
) as T
ORDER BY CASE
WHEN group_id = 1 THEN group_id
ELSE time_id
END
LIMIT 4

输出

| insertTimeStamp | port | data | group_id | time_id |
|-----------------|------|------|----------|---------|
| 1 | 20 | aaa | 1 | 1 |
| 2 | 21 | aza | 1 | 3 |
| 15 | 22 | 2aa | 1 | 8 |
| 2 | 20 | aba | 2 | 2 |

关于sql - 选择具有混合值的 N 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32892144/

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