我已经接近这个目标了吗?
我正在尝试列出包含“Ape”的所有记录...以及所有
出现在任何“Ape”记录之前 x 天的记录。
我想我需要一个自连接表?
-- Doesn't work:
SELECT tblA.MyDate, tblA.MyPet FROM TestTable As tblA WHERE tblA.MyPet='Ape'
UNION
SELECT tblA.MyDate, tblA.MyPet FROM TestTable AS tblA, TestTable AS tblB WHERE tblA.MyPet='Ape' AND tblA.MyDate>tblB.MyDate-0.5 AND tblA.MyDate<tblB.MyDate
ORDER BY tblA.MyDate ASC
-- Doesn't work:
SELECT * FROM TestTable As tblA INNER JOIN TestTable As tblB ON tblA.MyPet = 'Ape' AND tblA.MyDate>tblB.MyDate-1 AND tblA.MyKey>tblB.MyKey
-- Doesn't work:
SELECT * FROM TestTable WHERE MyDate IN (SELECT MyDate-1 FROM TestTable WHERE MyPet='Ape')
-- Doesn't work
SELECT id, uid, date FROM orders current
WHERE EXISTS
(
SELECT * from orders future
WHERE future.date < DateAdd(DAYS, 1, current.date)
AND future.date > getdate()
AND future.uid = current.uid
)
-- Doesn't work
SELECT * FROM TestTable AS tblA
WHERE EXISTS
(
SELECT * FROM TestTable AS tblB
WHERE tblB < DateAdd(DAYS, 1, tblA.MyDate)
AND tblB.MYDate > GetDate()
AND tblA.MyKey = tblB.MyKey
)
============================= 以下是表格:
CREATE TABLE TestTable
(
MyKey Int IDENTITY(1,1) PRIMARY KEY,
MyDate DateTime NOT NULL DEFAULT GetDate(),
MyPet VarChar(22) NOT NULL DEFAULT ''
)
INSERT INTO TestTable(MyDate, MyPet) VALUES('01-Dec-2012 06:12:10', 'Cat' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('01-Dec-2012 10:11:10', 'Dog' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('01-Dec-2012 14:13:10', 'Fish' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('01-Dec-2012 16:14:10', 'Duck' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('01-Dec-2012 17:15:10', 'Bird' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('01-Dec-2012 20:16:10', 'Kitten')
INSERT INTO TestTable(MyDate, MyPet) VALUES('02-Dec-2012 01:17:10', 'Dog' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('02-Dec-2012 12:19:10', 'Fish' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('02-Dec-2012 13:20:10', 'Duck' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('02-Dec-2012 14:21:10', 'Bird' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('02-Dec-2012 16:18:10', 'Cat' ) -- These are within 1 day before any "Ape" record
INSERT INTO TestTable(MyDate, MyPet) VALUES('03-Dec-2012 05:26:10', 'Dog' ) --
INSERT INTO TestTable(MyDate, MyPet) VALUES('03-Dec-2012 11:22:10', 'Kitten') --
INSERT INTO TestTable(MyDate, MyPet) VALUES('03-Dec-2012 12:23:10', 'Duck' ) --
INSERT INTO TestTable(MyDate, MyPet) VALUES('03-Dec-2012 13:24:10', 'Bird' ) --
INSERT INTO TestTable(MyDate, MyPet) VALUES('03-Dec-2012 14:25:10', 'Ape' ) -- An "Ape" record
INSERT INTO TestTable(MyDate, MyPet) VALUES('03-Dec-2012 16:27:10', 'Cat' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('04-Dec-2012 01:32:10', 'Dog' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('04-Dec-2012 04:28:10', 'Fish' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('04-Dec-2012 07:30:10', 'Bird' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('04-Dec-2012 10:31:10', 'Kitten')
INSERT INTO TestTable(MyDate, MyPet) VALUES('04-Dec-2012 16:29:10', 'Duck' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('05-Dec-2012 11:35:10', 'Kitten')
INSERT INTO TestTable(MyDate, MyPet) VALUES('05-Dec-2012 12:36:10', 'Duck' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('05-Dec-2012 13:33:10', 'Duck' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('05-Dec-2012 13:37:10', 'Bird' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('05-Dec-2012 14:34:10', 'Dog' )
INSERT INTO TestTable(MyDate, MyPet) VALUES('06-Dec-2012 04:41:10', 'Fish' ) -- These are within 1 day before any "Ape" record
INSERT INTO TestTable(MyDate, MyPet) VALUES('06-Dec-2012 05:39:10', 'Dog' ) --
INSERT INTO TestTable(MyDate, MyPet) VALUES('06-Dec-2012 14:38:10', 'Kitten') --
INSERT INTO TestTable(MyDate, MyPet) VALUES('06-Dec-2012 16:40:10', 'Ape' ) -- An "Ape" record
INSERT INTO TestTable(MyDate, MyPet) VALUES('06-Dec-2012 16:42:10', 'Duck' )
最佳答案
这就是你想要的:
SELECT DISTINCT
tblA.*
FROM TestTable AS tblA
INNER JOIN TestTable AS tblB
ON (tblA.MyDate >= DATEADD(day, -1, tblB.MyDate)) AND (tblA.MyDate <= tblB.Mydate) AND (tblB.MyPet = 'Ape');
这是工作SQLFiddle .
更新
根据下面戈登的评论添加了DISTINCT
。
关于sql - 列出另一组记录 x 小时内发生的所有 SQL 记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15144776/