Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL:更新ID;根据日期_Sql_Sql Server - Fatal编程技术网

SQL:更新ID;根据日期

SQL:更新ID;根据日期,sql,sql-server,Sql,Sql Server,我有一张桌子在下面 我喜欢根据日期然后按用户更新ID 例如 感谢您可以为此使用通用表表达式,并从原始表中加入它,例如: 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

我有一张桌子在下面

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

例如


感谢您可以为此使用
通用表表达式
,并从原始表中加入它,例如:

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]

您可以为此使用
通用表表达式
,并从原始表将其连接起来,例如:

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]

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')
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
| 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 |
查询1

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')
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
| 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 |

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')
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
| 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 |

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')
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
| 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 |
查询1

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')
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
| 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 |

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')
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
| 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 |

所以我假设给出的例子是输出,对吗?数据在更新之前是什么样子的?所以我假设给出的示例是正确的输出?数据在更新之前是什么样子的?你因为弄清楚了他们想要什么而赢得了“年度Mindreader”奖。Mikael-我认为你是第一个在SQL Fiddle上使用降价格式选项的人!呜呼!这并不是毫无意义的!英雄联盟cheers@JakeFeasel我很荣幸成为第一个:)。我非常喜欢并使用你的网站。你在这方面做得很好。你因为弄清楚了他们想要什么而赢得了“年度Mindreader”奖。Mikael-我认为你是第一个在SQL Fiddle上使用降价格式选项的人!呜呼!这并不是毫无意义的!英雄联盟cheers@JakeFeasel我很荣幸成为第一个:)。我非常喜欢并使用你的网站。你用它做得很好。