【问题标题】:Get rows with consecutive Date(Day)获取具有连续日期(天)的行
【发布时间】:2013-08-30 14:25:50
【问题描述】:

我正在寻找一种方法来更新前一天发生过其他事件的所有行。

例子:

ID     Config Number     Date          Status
1      238               10/9/2013     1
2      351               1/9/2013      2
3      351               2/9/2013      0
4      238               11/9/2013     0
5      124               18/9/2013     3
6      238               20/9/2013     0
7      238               12/9/2013     0
8      124               20/9/2013     0
9      238               13/9/2013     0

更新后我想要类似的东西:

ID     Config Number     Date          Status
1      238               10/9/2013     1
2      351               1/9/2013      2
3      351               2/9/2013      2
4      238               11/9/2013     1
5      124               18/9/2013     3
6      238               20/9/2013     0
7      238               12/9/2013     1 
8      124               20/9/2013     0
9      238               13/9/2013     1

我现在拥有的是:

Update sc
set sc.Status = (Select Status From sc1 inner Join sc On sc.Id = sc1.ID)
From sc

而且我知道它不起作用,但我不知道我的查询应该是什么样子。

【问题讨论】:

  • 请向我们展示您尝试过的代码以及为什么它不起作用。
  • 我用我目前拥有的内容编辑了我的问题。

标签: sql sql-server-2005 sql-update


【解决方案1】:
update T1 set
    Status = T2.[Status]
from sc as T1
    inner join sc as T2 on T2.[Date] = dateadd(dd, -1, T1.Date)

sql fiddle demo

的,如果您必须在 Config Number 中搜索上一个日期

update T1 set
    Status = T2.[Status]
from sc as T1
    inner join sc as T2 on T2.[Date] = dateadd(dd, -1, T1.Date) and T2.[Config Number] = T1.[Config Number]

【讨论】:

  • 连续约会超过1次怎么办?
  • 请举例,你到底想得到什么
【解决方案2】:

我们可以通过将表连接到自身来使用“自连接”,但要规定连续天数。将其转为更新如下:

update a
set a.[Status] = b.[Status]
from sc as a
    join sc as b on a.[Config Number] = b.[ConfigNumber]
        and a.[Date] = dateadd(dd, 1, b.[Date])

这将更新与 Config Number 匹配的连续记录。我假设您的“更新后”演示数据最后有错误的重复记录。

另外,作为一般要点:

  • 尝试使用ISO 8601 日期格式来消除日期中的歧义(例如“2013-09-20”)。
  • 请勿在列名中使用空格。
  • 尽量避免将keywords 作为列名。

【讨论】:

  • 连续约会超过1次怎么办?
猜你喜欢
  • 2017-09-18
  • 1970-01-01
  • 1970-01-01
  • 2022-06-28
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 2022-09-24
  • 1970-01-01
相关资源
最近更新 更多