带拆分的T-SQL分组
我想对连续的相似值进行分组。我想将第一个3个注册病房、一个ICU和最后一个3个注册病房分组。问题是第三组与第一组相同,我无法将它们单独分组。我尝试过窗口功能和其他功能,但都没有用。如果您有任何想法,我将不胜感激。谢谢 数据集带拆分的T-SQL分组,sql,sql-server,tsql,Sql,Sql Server,Tsql,我想对连续的相似值进行分组。我想将第一个3个注册病房、一个ICU和最后一个3个注册病房分组。问题是第三组与第一组相同,我无法将它们单独分组。我尝试过窗口功能和其他功能,但都没有用。如果您有任何想法,我将不胜感激。谢谢 数据集 ID OccpdID Unit 1 1 Reg 1 2 Reg 1 3 Reg 1 4 ICU 1 5 Reg 1 6 Reg 1 7
ID OccpdID Unit
1 1 Reg
1 2 Reg
1 3 Reg
1 4 ICU
1 5 Reg
1 6 Reg
1 7 Reg
结果如下:
ID OccpdID Unit Group
1 1 Reg 1
1 2 Reg 1
1 3 Reg 1
1 4 ICU 2
1 5 Reg 3
1 6 Reg 3
1 7 Reg 3
您可以尝试在带有SUMand CASE WHEN窗口函数的子查询中使用LAG
SELECT ID,OccpdID,Unit,SUM(CASE WHEN Unit <> prevVal THEN 1 ELSE 0 END) OVER(ORDER BY OccpdID) +1 as 'Group'
FROM (
SELECT *, LAG(Unit) OVER(ORDER BY OccpdID) prevVal
FROM Dataset
) t1
我不确定您希望如何/是否将ID纳入其中,但类似的内容将提供所需的结果:
SELECT
ID
, OccpdID
, Unit
, SUM(CASE WHEN Unit <> L OR L IS NULL THEN 1 ELSE 0 END) OVER (ORDER BY OccpdID) [Group]
FROM
(
SELECT
ID
, OccpdID
, Unit
, LAG(Unit, 1, NULL) OVER (ORDER BY OccpdID) L
FROM YourTable
) Q
我将使用滞后和累积总和:
select t.*,
sum(case when prev_unit = unit then 0 else 1 end) over (order by occpdid) as grp
from (select t.*, lag(t.unit) over (order by t.occpdid) as prev_unit
from t
) t;
使用适当的软件MySQL、Oracle、DB2等标记数据库问题是很有帮助的。。。和版本,例如sql-server-2014。语法和特征的差异通常会影响答案。请注意,tsql缩小了选择范围,但没有指定数据库。谢谢,这一个对我有用。其他意见书也很好。我将从中吸取教训。感谢您的快速回复和时间……。@DonaldB没问题,很乐意帮助您,如果其他答案对您有帮助,您可以选择其他答案