如何从表中选择top1 [英] How do I select top1 from table

查看:91
本文介绍了如何从表中选择top1的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我有一个带有桌子的数据库,如下所示



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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆