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