我仔细阅读了您的问题并总结如下:
- 子行可能存在于日期 X 之前、之后或之后
- 我希望所有孩子的父母都有一个日期 X 日期/之前的日期
见下面的代码。我们使用 HAVING 语句来确保孩子在 X 之后没有日期。
SELECT P.*
FROM Parent P
WHERE P.id IN
(
SELECT C.parentID
FROM Child C
GROUP BY C.parentID
HAVING MAX(CASE WHEN date > '2010-10-13' THEN 1 ELSE 0 END) = 0
/* do not return children that have a date after 2010-10-13 */
)
为那些想要一起玩的人提供示例架构。 (SQL 服务器)
(“date”被称为“mydate”以避免必须转义保留字。)
CREATE TABLE Parent (id INT PRIMARY KEY);
CREATE TABLE Child (id INT IDENTITY PRIMARY KEY, parentID INT NOT NULL REFERENCES Parent(id), mydate DATE );
INSERT INTO Parent VALUES (1);
INSERT INTO Parent VALUES (2);
INSERT INTO Parent VALUES (3);
INSERT INTO Parent VALUES (4);
INSERT INTO Child (parentID, mydate) VALUES (1,'2010-10-11')
INSERT INTO Child (parentID, mydate) VALUES (1,'2010-10-12')
INSERT INTO Child (parentID, mydate) VALUES (1,'2010-10-13')
INSERT INTO Child (parentID, mydate) VALUES (2,'2010-10-12')
INSERT INTO Child (parentID, mydate) VALUES (2,'2010-10-13')
INSERT INTO Child (parentID, mydate) VALUES (2,'2010-10-14')
INSERT INTO Child (parentID, mydate) VALUES (3,'2010-10-14')
INSERT INTO Child (parentID, mydate) VALUES (3,'2010-10-15')
INSERT INTO Child (parentID, mydate) VALUES (3,'2010-10-16')