gpt4 book ai didi

sql - 选择满足条件的行后三行

转载 作者:太空狗 更新时间:2023-10-30 01:57:10 24 4
gpt4 key购买 nike

我们有 7 个人在波兰旅行 ( ;) )。问题是找到他们访问华沙后访问过的最多三个下一个城市。如果一个人去过华沙两次,也算作下一次旅行的起点。例如,家伙 1 不仅有过旅行——华沙、克拉科夫、华沙、格但斯克,还有华沙、格但斯克。

表A

+------+-----------+-----+
| date | city | guy |
+------+-----------+-----+
| 2 | Warsaw | 1 |
| 4 | Cracow | 1 |
| 5 | Cracow | 2 |
| 6 | Bialystok | 3 |
| 7 | Warsaw | 1 |
| 8 | Gdansk | 1 |
| 10 | Warsaw | 5 |
| 12 | Cracow | 5 |
| 14 | Bialystok | 6 |
| 15 | Warsaw | 7 |
| 20 | Warsaw | 7 |
+------+-----------+-----+

所以最终的表格看起来是这样的:

+-----------+-----------+-----------+-----------+
| Starting | 2nd dest. | 3th dest. | 4th dest. |
+-----------+-----------+-----------+-----------+
| Warsaw | Cracow | Warsaw | Gdansk |
| Warsaw | Gdansk | | |
| Warsaw | Cracow | | |
| Warsaw | Warsaw | | |
| Warsaw | | | |
+-----------+-----------+-----------+-----------+

问题是创建一个查询,该查询将自动从表 A 创建最终表。

找到每个起点没有问题,但我不知道如何找到每个第二个目的地。在我看来,必须有某种循环——这个人必须与起点相同,第二个目的地的日期必须大于这个确切起点的日期。

如能帮助解决此问题,我们将不胜感激。 ;)

带有更多示例条目数据的 SQLFiddle - http://sqlfiddle.com/#!2/de0f1上面的数据只是一个示例,解决方案需要处理更大的数据集。

最佳答案

如果您使用的是 SQL Server 2012 或更高版本,您可以很容易地 solve the problemLEAD() analytic function 的帮助下:

WITH ThreeDestinations AS (
SELECT
*,
Destination2 = LEAD(city, 1) OVER (PARTITION BY guy ORDER BY date),
Destination3 = LEAD(city, 2) OVER (PARTITION BY guy ORDER BY date),
Destination4 = LEAD(city, 3) OVER (PARTITION BY guy ORDER BY date)
FROM
dbo.voyage
)
SELECT
StartingPoint = city,
Destination2,
Destination3,
Destination4
FROM
ThreeDestinations
WHERE
city = 'Warsaw'
ORDER BY
date
;

对 LEAD 的三个调用为您提供了原始集中每个城市之后的前三个(或更少)目的地。下一步,也是最后一步,就是过滤掉起点不是华沙的行。

关于sql - 选择满足条件的行后三行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24829175/

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