在块中分配递增的值
Assigning increasing values in blocks
我有一个 table 具有以下特征:
RecordId-唯一标识符
日期、体重和对照(如果体重 >10000 则为 1 否则为 0)。
RecordID Date Weight Control
1 16/07/2014 12200 1
2 16/07/2014 0 0
3 16/07/2014 5720 0
4 16/07/2014 11060 1
5 16/07/2014 15940 1
6 16/07/2014 16200 1
7 16/07/2014 16080 1
8 16/07/2014 16080 1
9 16/07/2014 16080 1
10 18/07/2014 16080 1
11 18/07/2014 3720 0
12 18/07/2014 4500 0
13 18/07/2014 23800 1
14 18/07/2014 40700 1
15 18/07/2014 40700 1
我想添加一个新列(组),它为每组 0 和 1 分配相同的递增数字,如下所示:
RecordID Date Weight Control Group
1 16/07/2014 12200 1 1
2 16/07/2014 0 0 2
3 16/07/2014 5720 0 2
4 16/07/2014 11060 1 3
5 16/07/2014 15940 1 3
6 16/07/2014 16200 1 3
7 16/07/2014 16080 1 3
8 16/07/2014 16080 1 3
9 16/07/2014 16080 1 3
10 18/07/2014 16080 1 3
11 18/07/2014 3720 0 4
12 18/07/2014 4500 0 4
13 18/07/2014 23800 1 5
14 18/07/2014 40700 1 5
15 18/07/2014 40700 1 5
请帮我解开这个谜题。
我假设您使用的是 Microsoft Transact SQL。
这是一个使用 CASE WHEN 语句来识别 Control 列中的更改的解决方案。
我在下面的 T-SQL.
中用原始数据(RecordID、Date、Weight 和 Control)将 table 命名为 'Flori'
SELECT f.RecordID, f.Date, f.Weight, f.Control,
SUM(x.Change) OVER (ORDER BY f.RecordId) + 1 as [Group]
FROM
(SELECT RecordID,
(SELECT
CASE
WHEN Control !=
(SELECT Control FROM Flori WHERE RecordId = f.RecordID - 1)
THEN 1
ELSE 0
END
) as Change
FROM Flori as f) as x
INNER JOIN Flori f on x.RecordID = f.RecordID
GROUP BY f.RecordID, f.Date, f.Weight, f.Control, x.Change
我有一个 table 具有以下特征: RecordId-唯一标识符 日期、体重和对照(如果体重 >10000 则为 1 否则为 0)。
RecordID Date Weight Control
1 16/07/2014 12200 1
2 16/07/2014 0 0
3 16/07/2014 5720 0
4 16/07/2014 11060 1
5 16/07/2014 15940 1
6 16/07/2014 16200 1
7 16/07/2014 16080 1
8 16/07/2014 16080 1
9 16/07/2014 16080 1
10 18/07/2014 16080 1
11 18/07/2014 3720 0
12 18/07/2014 4500 0
13 18/07/2014 23800 1
14 18/07/2014 40700 1
15 18/07/2014 40700 1
我想添加一个新列(组),它为每组 0 和 1 分配相同的递增数字,如下所示:
RecordID Date Weight Control Group
1 16/07/2014 12200 1 1
2 16/07/2014 0 0 2
3 16/07/2014 5720 0 2
4 16/07/2014 11060 1 3
5 16/07/2014 15940 1 3
6 16/07/2014 16200 1 3
7 16/07/2014 16080 1 3
8 16/07/2014 16080 1 3
9 16/07/2014 16080 1 3
10 18/07/2014 16080 1 3
11 18/07/2014 3720 0 4
12 18/07/2014 4500 0 4
13 18/07/2014 23800 1 5
14 18/07/2014 40700 1 5
15 18/07/2014 40700 1 5
请帮我解开这个谜题。
我假设您使用的是 Microsoft Transact SQL。
这是一个使用 CASE WHEN 语句来识别 Control 列中的更改的解决方案。
我在下面的 T-SQL.
中用原始数据(RecordID、Date、Weight 和 Control)将 table 命名为 'Flori'SELECT f.RecordID, f.Date, f.Weight, f.Control,
SUM(x.Change) OVER (ORDER BY f.RecordId) + 1 as [Group]
FROM
(SELECT RecordID,
(SELECT
CASE
WHEN Control !=
(SELECT Control FROM Flori WHERE RecordId = f.RecordID - 1)
THEN 1
ELSE 0
END
) as Change
FROM Flori as f) as x
INNER JOIN Flori f on x.RecordID = f.RecordID
GROUP BY f.RecordID, f.Date, f.Weight, f.Control, x.Change