SQL Server按Workcell聚类并按组内最早时间戳排序结果
解决方案
可以使用窗口函数MIN()结合PARTITION BY实现需求,通过该函数获取每个Workcell组的最早EnteredOn时间作为组的排序依据,再在组内按EnteredOn升序排列。具体SQL语句如下:
SELECT ID, Workcell, EnteredOn FROM Orders ORDER BY -- 按每个Workcell组的最早EnteredOn时间确定组的排序顺序 MIN(EnteredOn) OVER (PARTITION BY Workcell), -- 组内按单条记录的EnteredOn升序排列 EnteredOn;
逻辑说明
MIN(EnteredOn) OVER (PARTITION BY Workcell):该窗口函数会为每条记录计算其所属Workcell组的最早EnteredOn时间。例如T1A组的两条记录,这个计算值均为2024-04-25 13:50:01.990,DTA组的两条记录均为2024-04-25 14:22:55.237。- 外层
ORDER BY先按这个组级的最早时间排序,确保同Workcell的记录聚类在一起,且组的顺序由组内最早时间决定;再按单条记录的EnteredOn升序,保证组内记录的顺序符合要求。
执行结果验证
执行上述语句后,将得到符合要求的排序结果:
| ID | Workcell | EnteredOn |
|---|---|---|
| 1 | T1A | 2024-04-25 13:50:01.990 |
| 5 | T1A | 2024-04-25 14:51:01.173 |
| 2 | T1B | 2024-04-25 14:22:18.727 |
| 3 | DTA | 2024-04-25 14:22:55.237 |
| 6 | DTA | 2024-04-25 15:22:08.527 |
| 4 | 552-8A | 2024-04-25 14:34:56.890 |
内容的提问来源于stack exchange,提问作者Bushmatic
相关产品推荐
相关产品推荐

