用于按列选择系列中第一个的SQL查询

用于按列选择系列中第一个的SQL查询,sql,database,greatest-n-per-group,Sql,Database,Greatest N Per Group,我很难对我要做的事情提出疑问 我有一个表,我们称之为“运动”,包含以下列: RecID(键)、元素(f键)、时间(日期时间)、房间(内部) 该表记录了元素的运动历史。一个记录包含该记录所针对的元素、记录位置的时间以及该记录当时所在的房间 我想要的是所有表明元素进入房间的记录。这意味着在同一房间中,任何元素在一系列动作中的第一次(按时间)进入 输入是房间号和时间。也就是说,我想要所有的记录表明任何元素在时间Y之后进入X房间 我最接近的是这个 Select Element, min(Time) fr

我很难对我要做的事情提出疑问

我有一个表,我们称之为“运动”,包含以下列:

RecID(键)、元素(f键)、时间(日期时间)、房间(内部)

该表记录了元素的运动历史。一个记录包含该记录所针对的元素、记录位置的时间以及该记录当时所在的房间

我想要的是所有表明元素进入房间的记录。这意味着在同一房间中,任何元素在一系列动作中的第一次(按时间)进入

输入是房间号和时间。也就是说,我想要所有的记录表明任何元素在时间Y之后进入X房间

我最接近的是这个

Select Element, min(Time)
from Movements
where Time > Y and Room = x
group by Element
每个元素只会给我一个房间进入记录(如果元素从时间Y起已经进入X房间两次,我只会拿回第一个),有什么想法吗?如果我没有解释清楚,请告诉我


我使用的是MS SQLServer 2005。

这听起来像是每个组的典型分钟数,在SQL Server中,可以通过使用行号来解决:

SELECT Element, Time
FROM (
    SELECT
        Element, Time, 
        ROW_NUMBER() OVER(PARTITION BY Element ORDER BY Time) AS rn
    FROM Movements
    WHERE Room = 1 AND Time > '2010-06-01 00:30:00'
) T1
WHERE rn = 1
示例结果:

Element Time 1 2010-06-01 02:00:00.000 2 2010-06-01 03:00:00.000
添加了
magest-n-per-group
标记,因为这基本上是一个类似于在几十个其他StackOverflow问题中提出的问题。@Shannon Severance:如果您愿意,您可以在我的答案中使用create table语句和测试数据作为起点。谢谢,我将在Futurabank中包含这些内容,谢谢,我不知道您可以这样做。通过“那”,我指的是嵌套select语句。那会让我的生活轻松很多次。
CREATE TABLE Movements (RecID INT NOT NULL, Element INT NOT NULL, Time DATETIME NOT NULL, Room INT NOT NULL);
INSERT INTO Movements (RecID, Element, Time, Room) VALUES
(1, 1, '2010-06-01 00:00:00', 1),
(2, 1, '2010-06-01 01:00:00', 2),
(3, 1, '2010-06-01 02:00:00', 1),
(4, 2, '2010-06-01 03:00:00', 1),
(5, 2, '2010-06-01 04:00:00', 2),
(6, 1, '2010-06-01 05:00:00', 3),
(7, 2, '2010-06-01 06:00:00', 2);