English 中文(简体)
依时间选择顶层 nth 组
原标题:Select Top nth group by time

我有这个结果设置片段,

DateAndTime         Date        Hr  Min Tag Val
11/15/2011 0:00:29  11/15/2011  0   0   47  0.084000006318092
11/15/2011 0:00:59  11/15/2011  0   0   47  0.086000002920628
11/15/2011 0:00:13  11/15/2011  0   0   47  0.084000006318092
11/15/2011 0:00:44  11/15/2011  0   0   47  0.087000004947186
11/15/2011 0:05:06  11/15/2011  0   5   47  0.088500000536442
11/15/2011 0:05:21  11/15/2011  0   5   47  0.084500007331371
11/15/2011 0:05:51  11/15/2011  0   5   47  0.086000002920628
11/15/2011 0:05:36  11/15/2011  0   5   47  0.088000006973743
11/15/2011 0:10:41  11/15/2011  0   10  47  0.086000002920628
11/15/2011 0:10:56  11/15/2011  0   10  47  0.089500002563000
11/15/2011 0:10:09  11/15/2011  0   10  47  0.086500003933907
11/15/2011 0:10:25  11/15/2011  0   10  47  0.089000001549721
11/15/2011 0:15:45  11/15/2011  0   15  47  0.089000001549721
11/15/2011 0:15:14  11/15/2011  0   15  47  0.087500005960465
11/15/2011 0:15:29  11/15/2011  0   15  47  0.089500002563000
11/15/2011 0:20:48  11/15/2011  0   20  47  0.106000006198883
11/15/2011 0:20:03  11/15/2011  0   20  47  0.109500005841255
11/15/2011 0:20:18  11/15/2011  0   20  47  0.104500003159046
11/15/2011 0:20:33  11/15/2011  0   20  47  0.109000004827976

我只想回回一排 0分, 5分, 5分, 10分,等等

最佳回答

我认为以下内容应在所有数据库管理系统中有效(不过,目前我无法测试):

SELECT actual.DateAndTime, actual.Tag, actual.Val
FROM ResultTable actual
LEFT JOIN ResultTable exclude
ON exclude.Date = actual.Date
AND exclude.Hr = actual.Hr
AND exclude.Min = actual.Min
AND exclude.DateAndTime > actual.DateAndTime
WHERE exclude.DateAndTime IS NULL

...应该能把每一分钟的最新行数 净化出来

问题回答
DECLARE @Minutes VARCHAR(1000) 
;WITH MyRecords AS
(
   SELECT TOP 3 Distinct Min FROM TableName
)


SELECT @Minutes = COALESCE(@Minutes +  ,  ,   ) + MINFROM MyRecords 

PRINT @Minutes

结果:0、5、10

如果您需要添加分钟, 您可以在 @ minutes 之前轻松添加 :)

这是您想要窗口函数的例子, 但是在 SQL 服务器 2000 中无法找到这些功能 。

以下是另一个选择:

select t.*
from t join
     (select date, hour, min, min(datetime) as mindatetime
      from t
      group by date, hour, min
     ) tsum
     on t.datetime = tsum.mindatetime

此假设日期字段是独一无二的。 否则, 如果您在列中有一个 ID, 您可以代之以使用它 。

SELECT *, 
       id = IDENTITY(INT, 1, 1) 
INTO   #temp 
FROM   MyTable 
ORDER  BY [min] 

SELECT o.* 
FROM   #temp o 
WHERE  o.id = (SELECT Min(id) 
               FROM   #temp t 
               WHERE  t.[Min] = o.[Min]) 




相关问题
SQL SubQuery getting particular column

I noticed that there were some threads with similar questions, and I did look through them but did not really get a convincing answer. Here s my question: The subquery below returns a Table with 3 ...

难以执行 REGEXP_SUBSTR

I m 查询Oracle 10g。 我有两张表格(样本数据见下文)。 i m 试图提取一些领域

SQL Query Shortcuts

What are some cool SQL shorthands that you know of? For example, something I learned today is you can specify to group by an index: SELECT col1, col2 FROM table GROUP BY 2 This will group by col2

PHP array callback functions for cleaning output

I have an array of output from a database. I am wondering what the cleanest way to filter the values is example array Array ( [0] => Array ( [title] => title 1 ...

OracleParameter and DBNull.Value

we have a table in an Oracle Database which contains a column with the type Char(3 Byte). Now we use a parameterized sql to select some rows with a DBNull.Value and it doesn t work: OracleCommand ...

Running numbers in SQL

I have a SQL-statement like this: SELECT name FROM users WHERE deleted = 0; How can i create a result set with a running number in the first row? So the result would look like this: 1 Name_1 2 ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签