【发布时间】:2023-01-05 23:26:31
【问题描述】:
我有按 SQL 查询结果分组的数据集。此数据具有 ROW_NUMBER 值。在这里,如果 ROW_NUMBER 值按顺序排列,我想获得最高的 ROW_NUMBER 值。我怎样才能做到这一点。我的 SQL 查询是这样的。
SELECT [_NAME]
,[LINE]
,[TIMESTAMP]
,[Equipment]
,[CL_Name]
,[Status]
,[ROW_NUMBER]
FROM [dbo].[Deflection]
where [TIMESTAMP] > DATEADD(day,-1,GETDATE()) and [Status] = 0
group by [CL_Name], [Equipment], [_NAME], [LINE], [TIMESTAMP], [Status], [ROW_NUMBER]
order by [ROW_NUMBER] desc, [TIMESTAMP] desc
查询的输出如下:
| _NAME | LINE | TIMESTAMP | Equipment | CL_Name | Status | ROW_NUMBER |
|---|---|---|---|---|---|---|
| 01Pack | 2 | 2023-01-04 16:45:35.673 | Pack | A | 0 | 288 |
| 01Pack | 2 | 2023-01-04 16:50:35.673 | Pack | A | 0 | 287 |
| 01Pack | 2 | 2023-01-04 16:55:35.673 | Pack | A | 0 | 286 |
| 02Pack | 3 | 2023-01-04 23:20:36.063 | Pack | B | 0 | 209 |
| 03Pack | 4 | 2023-01-04 23:20:36.063 | Pack | C | 0 | 209 |
| 03Pack | 4 | 2023-01-04 23:25:36.067 | Pack | C | 0 | 208 |
| 03Pack | 4 | 2023-01-04 23:30:36.073 | Pack | C | 0 | 207 |
| 03Pack | 4 | 2023-01-04 23:35:36.077 | Pack | C | 0 | 206 |
| 01Pack | 2 | 2023-01-04 23:45:36.067 | Pack | A | 0 | 206 |
| 01Pack | 2 | 2023-01-04 23:50:36.073 | Pack | A | 0 | 205 |
| 01Pack | 2 | 2023-01-04 23:55:36.077 | Pack | A | 0 | 204 |
在这里,如果 ROW_NUMBER 按连续顺序连续,我希望具有相同 CL_Name 的值获得最大的 ROW_NUMBER 值,我不希望它们取其他值。所以我希望正确表的输出是这样的。
| _NAME | LINE | TIMESTAMP | Equipment | CL_Name | Status | ROW_NUMBER |
|---|---|---|---|---|---|---|
| 01Pack | 2 | 2023-01-04 16:45:35.673 | Pack | A | 0 | 288 |
| 02Pack | 3 | 2023-01-04 23:20:36.063 | Pack | B | 0 | 209 |
| 03Pack | 4 | 2023-01-04 23:20:36.063 | Pack | C | 0 | 209 |
| 01Pack | 2 | 2023-01-04 23:45:36.067 | Pack | A | 0 | 206 |
我想得到这样的输出,但我做不到。我怎样才能做到这一点?
【问题讨论】:
-
仅供参考,
timestamp通常不是 SQL Server 中列名的糟糕选择。timestamp是rowversion的已弃用同义词,它是一个binary(8)值,并且具有没有与日期和时间值有关。 -
如果 ROW_NUMBER 值才不是输入顺序值,输出应该是什么?
-
@ahmed 这里 ROW_NUMBER 总是按顺序排列。例如,因为我得到一个每日数据,它从 ROW_NUMBER = 288 开始,上升到 ROW_NUMBER =1。在这里,我的主要目的是每 5 分钟在 Status = 0 的数据中写入数据。查找具有 TIMESTAMP 值的数据,其中相同的重复 CL_Name 数据首先开始。所以得到最高的重复 ROW_NUMBER
-
然后考虑@The Impaler 的回答,说起来令人困惑如果 ROW_NUMBER 值进入顺序值虽然它总是按顺序进行。
-
@ahmed 我更新了我的问题。 Impaler 的回答不太符合我的要求。如果我那样做,它会根据单个 CL_Name 状态获取数据,并将其分组。其实,这不是我想要的。您可以在我编辑的问题中看到它。
标签: sql sql-server tsql