gpt4 book ai didi

sql-server - T-SQL中行内的时间顺序比较

转载 作者:搜寻专家 更新时间:2023-10-30 23:04:32 25 4
gpt4 key购买 nike

我正在使用 t-sql。

我有一个名为 mytable 的简单表

看起来像这样:

ID    Num    Date
1 0 2015-01-01 00:00:00
1 0 2015-01-02 00:00:00
1 1 2015-01-03 00:00:00
1 2 2015-01-04 00:00:00
2 0 2015-01-01 00:00:00
2 1 2015-02-01 00:00:00
2 0 2015-03-01 00:00:00
3 1 2014-01-01 00:00:00
3 2 2014-01-02 00:00:00
4 2 2015-02-01 00:00:00
4 0 2015-02-02 00:00:00
4 2 2015-02-05 00:00:00

这个表的情况很简单,任何时候 12 的值被输入到表中,后面的值(按时间顺序)不能是一个 0。这是一个数据输入错误,必须通过将 0 更改为 2 来解决。

因此,在上面的简化示例中,ID 对人 24 有错误。

对于人 2,有人在 2015-01-01 00:00:00 键入了 0,而对于人 4,有人在 2015-01-01 00:00:00 键入了 0

我是 SQL 的新手,老实说,我宁愿将整个东西导出为 csv,在 R 中打开它,找到问题,然后使用数据库中的更新语句更新值。但我觉得这是一个提高 SQL 水平的机会——不幸的是,我被困住了。

这里我需要一些方法来比较表中的行,因为它们是按 ID 分组的,同时还要考虑这种按时间顺序排列的情况。我试过使用 CASE 语句进行笛卡尔连接,但没有用。任何帮助将不胜感激。

最佳答案

此查询将选择所有有问题的记录:

SELECT *
FROM mytable AS t
WHERE Num = 0 AND EXISTS (SELECT 1
FROM mytable
WHERE Num IN (1,2) AND ID = t.ID AND Date < t.Date)

它选择所有 Num=0 的记录,这些记录有 Num=1 Num=2 前面 相同ID 的记录。

输出:

ID  Num Date
------------------
2 0 2015-03-01
4 0 2015-02-02

要更新表格,只需执行以下操作:

UPDATE mytable
SET Num = 2
FROM mytable AS t
WHERE Num = 0 AND EXISTS (SELECT 1
FROM mytable
WHERE Num IN (1,2) AND ID = t.ID AND Date < t.Date)

关于sql-server - T-SQL中行内的时间顺序比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28331786/

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