SQL选择按其他内容分组时具有最高值的行
我有一张这样的桌子:SQL选择按其他内容分组时具有最高值的行,sql,sql-server-2008,grouping,max,Sql,Sql Server 2008,Grouping,Max,我有一张这样的桌子: . | ID | SystemID | StartDateTime | EndDateTime | 1 | 24 | 1 | 2012-11-09 13:59:00.000 | 2012-11-09 14:23:00.000 | 2 | 25 | 2 | 2012-11-09 13:59:00.000 | 2012-11-09 14:23:00.000 | 3 |
. | ID | SystemID | StartDateTime | EndDateTime |
1 | 24 | 1 | 2012-11-09 13:59:00.000 | 2012-11-09 14:23:00.000 |
2 | 25 | 2 | 2012-11-09 13:59:00.000 | 2012-11-09 14:23:00.000 |
3 | 26 | 3 | 2012-11-09 14:00:00.000 | 2012-11-09 14:24:00.000 |
4 | 27 | 1 | 2012-11-09 16:20:00.000 | 2012-11-09 17:19:00.000 |
5 | 28 | 2 | 2012-11-09 16:21:00.000 | 2012-11-09 17:37:00.000 |
6 | 29 | 3 | 2012-11-09 17:25:00.000 | 2012-11-09 17:50:00.000 |
| ID | SystemID | StartDateTime | EndDateTime |
| 27 | 1 | 2012-11-09 16:20:00.000 | 2012-11-09 17:19:00.000 |
| 25 | 2 | 2012-11-09 13:59:00.000 | 2012-11-09 14:23:00.000 |
| 26 | 3 | 2012-11-09 14:00:00.000 | 2012-11-09 14:24:00.000 |
对于每个系统id,我想选择在给定时间之前结束的最接近的行。
例如,如果时间是17:30,结果将如下所示:
. | ID | SystemID | StartDateTime | EndDateTime |
1 | 24 | 1 | 2012-11-09 13:59:00.000 | 2012-11-09 14:23:00.000 |
2 | 25 | 2 | 2012-11-09 13:59:00.000 | 2012-11-09 14:23:00.000 |
3 | 26 | 3 | 2012-11-09 14:00:00.000 | 2012-11-09 14:24:00.000 |
4 | 27 | 1 | 2012-11-09 16:20:00.000 | 2012-11-09 17:19:00.000 |
5 | 28 | 2 | 2012-11-09 16:21:00.000 | 2012-11-09 17:37:00.000 |
6 | 29 | 3 | 2012-11-09 17:25:00.000 | 2012-11-09 17:50:00.000 |
| ID | SystemID | StartDateTime | EndDateTime |
| 27 | 1 | 2012-11-09 16:20:00.000 | 2012-11-09 17:19:00.000 |
| 25 | 2 | 2012-11-09 13:59:00.000 | 2012-11-09 14:23:00.000 |
| 26 | 3 | 2012-11-09 14:00:00.000 | 2012-11-09 14:24:00.000 |
希望这有意义!谢谢您的帮助。您可以使用行号:
DECLARE @Date DATETIME
SET @Date = '20121109 17:30:00'
;WITH CTE AS
(
SELECT *,
ROW_NUMBER() OVER(PARTITION BY SystemID ORDER BY EndDateTime DESC) RN
FROM YourTable
WHERE EndDateTime < @Date
)
SELECT ID, SystemID, StartDateTime, EndDateTime
FROM CTE
WHERE RN = 1
供您尝试。您可以使用外部应用: