sql—仅选择seqnum为特定值的行

yftpprvb  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(277)

我有下面的脚本,如何只包含seqnum=1的行。现在所有的东西都显示出来了,我只想看到[longname]唯一的行。我不能把where子句放在seqnum周围,它不会识别列。

  1. SELECT [LongName]
  2. , [InstanceId]
  3. , [Number]
  4. , [Value]
  5. , [Employee]
  6. , [Time]
  7. , DENSE_RANK() over (partition by [LongName] order by [Time] desc) as seqnum
  8. FROM [DataValue]
  9. INNER JOIN [NumberPlate] ON DataValueId = NumberPlate.Id
  10. WHERE [Number] LIKE '%55AA0%' AND [Employee]=1
  11. ORDER BY [Time] DESC

我的查询的作用

  1. InstanceID Number Value LongName Employee Time seqnum
  2. 40 1 5105.993 Parameter C 1 05:10.0 1
  3. 20 1 5117.298 Parameter D 1 05:10.0 1
  4. 12 1 5126.925 Parameter E 0 05:10.0 1
  5. 46 1 5132.83 Parameter B 4 05:10.0 1
  6. 453 1 GG2 Parameter A 0 05:10.0 1
  7. 345 1 55D Parameter B 0 05:09.9 2
  8. 234 1 5287.562 Parameter D 1 05:09.9 2
  9. 865 1 5310.893 Parameter C 2 05:09.9 2
  10. 23 1 5105.993 Parameter B 2 05:09.9 2
  11. 245 1 GG3 Parameter A 3 03:57.8 2

我想要什么

  1. InstanceID Number Value LongName Employee Time seqnum
  2. 40 1 5105.993 Parameter C 1 05:10.0 1
  3. 20 1 5117.298 Parameter D 1 05:10.0 1
  4. 12 1 5126.925 Parameter E 0 05:10.0 1
  5. 46 1 5132.83 Parameter B 4 05:10.0 1
  6. 453 1 GG2 Parameter A 0 05:10.0 1
fae0ux8s

fae0ux8s1#

您也可以使用cte,如下所示:

  1. ;WITH CTE AS (
  2. SELECT [LongName]
  3. ,[InstanceId]
  4. ,[Number]
  5. ,[Value]
  6. ,[Employee]
  7. ,[Time]
  8. ,DENSE_RANK() OVER (PARTITION BY [LongName] ORDER BY [Time] DESC) AS seqnum
  9. FROM
  10. [DataValue]
  11. INNER JOIN [NumberPlate] ON DataValueId = NumberPlate.Id
  12. WHERE
  13. [Number] LIKE '%55AA0%' AND [Employee]=1
  14. )
  15. SELECT *
  16. FROM
  17. CTE
  18. WHERE
  19. seqnum = 1
  20. ORDER BY
  21. [Time]
  22. DESC
展开查看全部
8iwquhpp

8iwquhpp2#

这是一个有趣的方法 SELECT WITH TIES :

  1. SELECT TOP (1) WITH TIES [LongName], [InstanceId], [Number] , [Value], [Employee], [Time]
  2. FROM [DataValue] INNER JOIN
  3. [NumberPlate]
  4. ON DataValueId = NumberPlate.Id
  5. WHERE [Number] LIKE '%55AA0%' AND [Employee]=1
  6. ORDER BY DENSE_RANK() over (partition by [LongName] order by [Time] desc) as seqnum ;

如果你真的想要最后的结果 time ,但是,您需要一个附加的子查询。

v09wglhw

v09wglhw3#

仅在子查询中查询:

  1. Select * from
  2. (SELECT [LongName]
  3. ,[InstanceId]
  4. ,[Number]
  5. ,[Value]
  6. ,[Employee]
  7. ,[Time]
  8. ,DENSE_RANK() over (partition by [LongName] order by [Time] desc) as seqnum
  9. FROM [DataValue]
  10. INNER JOIN [NumberPlate]
  11. On DataValueId = NumberPlate.Id
  12. WHERE [Number] LIKE '%55AA0%' AND [Employee]=1
  13. ORDER BY [Time] DESC)
  14. where seqnum = 1;
展开查看全部

相关问题