gpt4 book ai didi

sql - 根据所选列中的相同值向行添加数字

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

我有一个 PostgreSQL 数据库,其中包含由几个司法管辖区编写的交通罚单。

一些司法管辖区不指明是否在一个交通站点写了多张罚单。但是,可以通过分析其他领域来推断这一点。考虑以下数据:

ticket_id  timestamp            drivers_license
----------------------------------------------
1 2008-08-07 01:51:00 11111111
2 2008-08-07 01:51:00 11111111
3 2008-08-07 02:02:00 22222222
4 2008-08-07 02:25:00 33333333
5 2008-08-07 04:23:00 44444444
6 2008-08-07 04:23:00 55555555
7 2008-08-07 04:23:00 44444444

我可以推断:

  • 罚单 1 和 2 是在一个交通站点写的,因为它们共享驾照号码和时间戳。
  • 5 号票和 7 号票也一样,但请注意 6 号票在它们之间的位置。可能另一位警官同时在其他地方写了一张罚单,或者数据输入运算符(operator)输入了乱序的东西。

我想添加另一列,该列对每个交通站点都有一个唯一 ID。它不会是表的主键,因为它会有重复的值。例如:

ticket_id  timestamp            drivers_license  stop_id
--------------------------------------------------------
1 2008-08-07 01:51:00 11111111 1
2 2008-08-07 01:51:00 11111111 1
3 2008-08-07 02:02:00 22222222 2
4 2008-08-07 02:25:00 33333333 3
5 2008-08-07 04:23:00 44444444 4
6 2008-08-07 04:23:00 55555555 5
7 2008-08-07 04:23:00 44444444 4

我可以想到使用 C# 执行此操作的计算密集型贪婪算法方法,但是否有有效的 SQL 查询可以工作?

最佳答案

如果您雇用 window function rank()这变得非常简单:

SELECT *
,rank() OVER (ORDER BY ts, drivers_license)
FROM tbl
ORDER BY ticket_id

准确返回您要求的内容。

我将您的列 timestamp 重命名为 ts,因为 timestamp 是 PostgreSQL 中的类型名称并且是 reserved word在每个 SQL 标准中。

关于sql - 根据所选列中的相同值向行添加数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9612678/

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