如何从表中选择top1 [英] How do I select top1 from table
问题描述
大家好,
我有一个带有桌子的数据库,如下所示
栏
1.Tag
2.TimeStamp
3.Value
TAG1 2014-06-12 10:09:00 。 000 62 。 44384
TAG1 2014-06-12 10:09:01 。 000 37 。 97031
TAG1 2014-06-12 10:09:02 。 000 11 。 49679
TAG1 2014-06-12 10:09:03 。 000 84 。< span class =code-leadattribute> 02327
TAG1 2014-06-12 10:09:04 。 000 58 。 54975
TAG1 2014-06 -12 10:09:05 。 000 32 。 07623
TAG1 2014-06-12 10:09:06 。 000 7 。< span class =code-leadattribute> 602705
-
TAG1 2014-06-12 10:09:54 。 000 80 。 34718
TAG1 2014-06-12 10:09:55 。 000 55 。 87366
TAG1 2014-06-12 10 :09:56 。 000 29 。 40014
TAG1 2014-06-12 10:09:57 。 000 < span class =code-leadattribute> 3 。 926617
TAG1 < span class =code-leadattribute> 2014-06-12 10:09:58 。 000 76 。 45309
TAG1 2014-06-12 10:09:59 。 000 50 。 97957
TAG1 2014-06-12 10:10:03 。 000 < span class =code-leadattribute> 2 。 876161
TAG1 < span class =code-leadattribute> 2014-06-12 10:10:04 。 000 20 。 61197
TAG1 2014-06-12 10:10:05 。 000 93 。 13844
TAG1 2014-06-12 10:10:06 。 000 68 。 66492
-
TAG1 2014-06-12 10:10:56 。 000 90 。 46236
TAG1 2014-06-12 10:10:57 。 000 64 。< span class =code-leadattribute> 98883
TAG1 2014-06-12 10:10:58 。 000 38 。 51531
TAG1 2014-06-12 10:10:59 。 000 12 。 04179
TAG1 2014-06-12 10:11:00 。 000 86 。 56827
TAG1 2014-06-12 10:11: 01 。 000 60 。 09475
TAG1 2014-06-12 10:11:02 。 000 34 。 62122
TAG1 2014-06-12 10:11:03 。 000 8 。 147702
TAG1 2014-06-12 10:11:04 。 000 81 。 67418
来自上表我想选择秒= 0的行,
这意味着我想要的数据10:09:00,10:10:00,10:11:00等.......
如果你观察上面的数据行时间戳'10:10 :00'不存在,在这种情况下,我想要一个最近的行10:10:00到10:10:59(在这种情况下10:10:03)
i想要一个sql查询这个或vb.net代码。
请帮我这个
- 谢谢你
-Srinivas
以下查询应该适用于 SQL Server 2005 :
; WITH 数据
AS ( SELECT *,
Row_Number()
OVER (
PARTITION BY DATEADD(mi,DATEDIFF(mi, 0 ,[< span class =code-keyword> TimeStamp ]), 0 )
ORDER BY [ TimeStamp ]) AS [RowNumber]
FROM [dbo]。[YourTable])
SELECT [Tag],
[ TimeStamp ],
[Value]
< span class =code-keyword> FROM 数据
WHERE [RowNumber] = 1
ORDER BY [ TimeStamp ];
结果:
标记TimeStamp值
TAG1 2014-06-12 10:09:00.000 62.44384
TAG1 2014-06-12 10:10:03.000 2.876161
TAG1 2014-06-12 10:11:00.000 86.56827
Hi all,
I have a database with a table as shown below
columns
1.Tag
2.TimeStamp
3.Value
TAG1 2014-06-12 10:09:00.000 62.44384
TAG1 2014-06-12 10:09:01.000 37.97031
TAG1 2014-06-12 10:09:02.000 11.49679
TAG1 2014-06-12 10:09:03.000 84.02327
TAG1 2014-06-12 10:09:04.000 58.54975
TAG1 2014-06-12 10:09:05.000 32.07623
TAG1 2014-06-12 10:09:06.000 7.602705
--
TAG1 2014-06-12 10:09:54.000 80.34718
TAG1 2014-06-12 10:09:55.000 55.87366
TAG1 2014-06-12 10:09:56.000 29.40014
TAG1 2014-06-12 10:09:57.000 3.926617
TAG1 2014-06-12 10:09:58.000 76.45309
TAG1 2014-06-12 10:09:59.000 50.97957
TAG1 2014-06-12 10:10:03.000 2.876161
TAG1 2014-06-12 10:10:04.000 20.61197
TAG1 2014-06-12 10:10:05.000 93.13844
TAG1 2014-06-12 10:10:06.000 68.66492
--
TAG1 2014-06-12 10:10:56.000 90.46236
TAG1 2014-06-12 10:10:57.000 64.98883
TAG1 2014-06-12 10:10:58.000 38.51531
TAG1 2014-06-12 10:10:59.000 12.04179
TAG1 2014-06-12 10:11:00.000 86.56827
TAG1 2014-06-12 10:11:01.000 60.09475
TAG1 2014-06-12 10:11:02.000 34.62122
TAG1 2014-06-12 10:11:03.000 8.147702
TAG1 2014-06-12 10:11:04.000 81.67418
from the above table i want to select rows where seconds = 0,
that means i want the data 10:09:00, 10:10:00, 10:11:00 and so on.....,
if you observe the above data row with time stamp '10:10:00' is not there in this case i want a nearest row between 10:10:00 to 10:10:59 ( 10:10:03 in this case)
i want a sql query for this or vb.net code.
pls help me on this
-Thank you
-Srinivas
Hi,
The following query should work in SQL Server 2005:
;WITH data AS (SELECT *, Row_Number() OVER( PARTITION BY DATEADD(mi, DATEDIFF(mi, 0, [TimeStamp]), 0) ORDER BY [TimeStamp]) AS [RowNumber] FROM [dbo].[YourTable]) SELECT [Tag], [TimeStamp], [Value] FROM data WHERE [RowNumber] = 1 ORDER BY [TimeStamp];
Result:
Tag TimeStamp Value TAG1 2014-06-12 10:09:00.000 62.44384 TAG1 2014-06-12 10:10:03.000 2.876161 TAG1 2014-06-12 10:11:00.000 86.56827
这篇关于如何从表中选择top1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!