返回所有记录,直到记录等于某个值访问/ SQL查询
问题描述:
我试图设置一个查询,该查询将返回表中某个组的所有记录,直到该表中的记录值等于某个值。返回所有记录,直到记录等于某个值访问/ SQL查询
我目前正在为子表查询中的每个组选择前2条记录,但如果我需要记录的事件落在前2位以外,则无法解决问题。我想增加子查询然而到前3名,然后如果有问题的事件在顶部2
发生。例如,返回到多的数据,如果我有
Name Date Event
Tom 5/5 Test
Tom 5/5 Test
Tom 5/5 Stop Test
Tom 5/5 Test
Tom 5/5 Test
Gary 5/5 Test
Gary 5/5 Stop Test
Gary 5/5 Test
我需要返回第3个记录汤姆和加里的前2个记录。在Access/SQL中有没有简单的方法来做到这一点?
答
SqlFiddle目前似乎不适用于MSSQL。
这里有一些东西应该让你走上正确的道路。我假设你的例子中的日期也意味着一个时间,因此也是事件的顺序。鉴于此,下面的SQL将根据日期时间生成一个行号,并按名称“分组”。针对PartialResult CTE的查询将返回生成的行号为< = =第一次出现每个名称的“Stop Test”事件的行。
BEGIN TRANSACTION
CREATE TABLE [NameDateEvent]
(
[Name] [NVARCHAR](100) NOT NULL,
[Date] DATETIME NOT NULL,
[Event] [NVARCHAR](100) NOT NULL,
)
GO
INSERT INTO [NameDateEvent]
VALUES
('Tom','2016-02-26 14:55:38.517', 'Test')
,('Tom','2016-02-26 14:55:39.517', 'Test')
,('Tom','2016-02-26 14:55:40.517', 'Stop Test')
,('Tom','2016-02-26 14:55:41.517', 'Test')
,('Tom','2016-02-26 14:55:42.517', 'Test')
,('Gary','2016-02-26 14:55:43.517', 'Test')
,('Gary','2016-02-26 14:55:44.517', 'Stop Test')
,('Gary','2016-02-26 14:55:45.517', 'Test')
GO
;WITH PartialResult AS
(
SELECT *, ROW_NUMBER() OVER (PARTITION BY [Name] ORDER BY [Date]) AS [RowNumByName]
FROM [NameDateEvent]
)
SELECT *
FROM PartialResult pr
WHERE pr.[RowNumByName] <= (SELECT MIN([RowNumByName]) FROM PartialResult prr WHERE prr.Name = pr.Name AND prr.Event = 'Stop Test')
ROLLBACK
您的查询在哪里?我们可以看到它吗... – zee
你说...“直到该表中的记录值等于某个值”...汤姆的记录值是多少? – zee
这是关于MS SQL Server或MS Access的问题吗?他们是不同的数据库。 – Mureinik