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]
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我很荣幸成为第一个:)。我非常喜欢并使用你的网站。你用它做得很好。