【问题标题】:SQL : Update ID; According to DateSQL : 更新 ID;根据日期
【发布时间】:2012-11-04 13:18:00
【问题描述】:

我有下面的表格。

我喜欢更新 ID 根据日期然后按用户。

举例

谢谢

【问题讨论】:

  • 所以我假设给出的示例是输出对吗?更新前的数据如何?

标签: sql sql-server


【解决方案1】:

您可以为此使用Common Table Expression,并从原始表中加入它,例如:

WITH newID
AS
(
  SELECT [User], [DATE],
          ROW_NUMBER() OVER (PARTITION BY bb.[User]
                            ORDER BY DATE ASC) RN
  FROM table1 bb
)
UPDATE a
  SET a.ID = b.RN
FROM table1 a INNER JOIN
      newID b ON a.[User] = b.[User] AND
              a.[Date] = b.[Date]

【讨论】:

    【解决方案2】:

    SQL Fiddle

    MS SQL Server 2008 架构设置

    create table YourTable
    (
      MYUser char(3),
      Date date,
      ID int
    )
    
    insert into YourTable(MYUser, Date) values
    ('U55', '2012-10-05'),
    ('U55', '2012-10-10'),
    ('U22', '2012-10-06'),
    ('U55', '2012-10-01'),
    ('U55', '2012-10-07'),
    ('U22', '2012-10-04'),
    ('U55', '2012-10-09'),
    ('U22', '2012-10-02'),
    ('U22', '2012-10-03'),
    ('U55', '2012-10-08')
    

    查询 1

    update T 
    set ID = rn
    from
      (
        select ID,
               row_number() over(partition by MYUser order by Date) as rn
        from YourTable
      ) as T
    
    
    select *
    from YourTable
    

    Results

    | MYUSER |       DATE | ID |
    ----------------------------
    |    U55 | 2012-10-05 |  2 |
    |    U55 | 2012-10-10 |  6 |
    |    U22 | 2012-10-06 |  4 |
    |    U55 | 2012-10-01 |  1 |
    |    U55 | 2012-10-07 |  3 |
    |    U22 | 2012-10-04 |  3 |
    |    U55 | 2012-10-09 |  5 |
    |    U22 | 2012-10-02 |  1 |
    |    U22 | 2012-10-03 |  2 |
    |    U55 | 2012-10-08 |  4 |
    

    【讨论】:

    • 您因了解他们想要什么而获得“年度读心者”奖。
    • Mikael - 我认为您是第一个在 SQL Fiddle 上使用 Markdown 格式选项的人!呜呼!这一切都不是徒劳的!大声欢呼
    • @JakeFeasel 我很荣幸成为第一个 :)。我非常喜欢并使用您的网站。你做得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 2017-11-03
    • 2016-11-18
    • 2015-08-26
    • 2021-09-25
    相关资源
    最近更新 更多