gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 23:23:19 25 4
gpt4 key购买 nike

我在想出我正在尝试做的事情的查询时遇到了一些麻烦。

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

RecID(Key), Element(f-key), Time(datetime), Room(int)

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

我要的是一个Element进入房间的所有记录。这意味着同一房间内该元素的一系列移动中的任何元素的第一个(按时间)条目。

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

我最接近的是这个

Select Element, min(Time)
from Movements
where Time > Y and Room = x
group by Element

虽然这只会给我每个元素一个房间进入记录(如果元素从时间 Y 开始进入房间 X 两次,我只会得到第一个)有什么想法吗?如果我没有解释清楚,请告诉我。

我正在使用 MS SQLServer 2005。

最佳答案

这听起来像是典型的每组最小值,在 SQL Server 中可以使用 ROW_NUMBER 来解决:

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.0002        2010-06-01 03:00:00.000

Test data:

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);

关于用于按列选择系列中第一个的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3025392/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com