我面临着返回"entryId";字段|"做记号根据日期的不同,每个entryId字段将有不同的数字,并且我需要选择相同的值,并且在"之前有一个更高的数字|"做记号
例如,我需要选择entryId=
'800181373149|3',"800181373112|3",'800181373186|3'
而不是'800181373186|1'
以下是我的代码:
SELECT
[entryId]
,[startDate]
,[endDate]
FROM [data]
WHERE entryId LIKE '8001813731%';
这是输出:
entryId | startDate | endDate|
---|---|---|
800181373149|3 | 2021-09-28T07:21:00-05:00 | 2021:09-28T16:03:00-05:00|
800181373112|3 | 2021-09-28T05:21:00-07:00 | 2021:09-28T12:00:00-07:00 |
800181373186|3 | 2021-09-28T07:21:00-05:00 | 2021:09-28T14:00:00-05:00 |
800181373186|1 | 2021-09-28T07:21:00-05:00 | 空 |
使用由管道前面的部分划分的row_number。
SELECT
[entryId]
, [startDate]
, [endDate]
FROM
(
SELECT
entryId
, startDate
, endDate
, rn = ROW_NUMBER() OVER (PARTITION BY LEFT(entryId, PATINDEX('%_|%', entryId)) ORDER BY entryId)
FROM [data]
WHERE entryId LIKE '8001813731%'
) q
WHERE rn = 1;
不确定您想要的是具有最高值的单个结果,还是具有最高起始日期编号的所有值。无论如何,在第八种情况下,您可以使用AND运算符生成第二个参数来添加startdate值。
SELECT
[entryId]
,[startDate]
,[endDate]
FROM [data]
WHERE entryId LIKE '8001813731%' AND startDate > 1;