我有3张桌子:
Doc_group
DOC_TYPE
文档
我想只检索Doc_group中的行,其中所有文档的日期都少于90天。
实施例: 的 Doc_group
+-----------------+ | id | name | +-----------------+ | 1 | doc_group_1 | +-----------------+ | 2 | doc_group_2 | +-----------------+ | 3 | doc_group_3 | +-----------------+
DOC_TYPE
+--------------------------------+ | id| name | doc_group_id | +--------------------------------+ | 1 | doc_type_1 | 1 | +--------------------------------+ | 2 | doc_type_2 | 1 | +--------------------------------+ | 3 | doc_type_2 | 2 | +--------------------------------+
文档:
+---------------------------------------+ | id| name | doc_type_id | date | +---------------------------------------+ | 1 | doc_1 | 1 |01/10/2012 | +---------------------------------------+ | 2 | doc_2 | 2 |01/9/2012 | +---------------------------------------+ | 3 | doc_3 | 3 |01/10/2012 | +---------------------------------------+ | 4 | doc_4 | 3 |26/07/2014 | +---------------------------------------+
结果: 只应返回doc_group_1,因为其所有文档的时间都少于90天。 doc_group_2不符合doc_4不少于90天的条件 的 Doc_group
+-----------------+ | id | name | +-----------------+ | 1 | doc_group_1 | +-----------------+
我尝试过分组,但我无法得到我想要的结果。
由于
答案 0 :(得分:2)
以下是您正在寻找的查询:
SELECT DG.*
FROM Doc_group DG
WHERE NOT EXISTS (SELECT D.id
FROM Doc D
WHERE D.doc_group_id = DG.id
AND D.date < DATEADD(DAY, -90, GETUTCDATE()))
这是T-SQL的解决方案,我对MySQL版本不太确定。 希望这对你有所帮助。
快速搜索后,这是查询的MySQL版本:
SELECT DG.*
FROM Doc_group DG
WHERE NOT EXISTS (SELECT D.id
FROM Doc D
WHERE D.doc_group_id = DG.id
AND D.date < DATE_SUB(CURDATE(), INTERVAL 90 DAY))
我没有任何MySQL数据库来测试这个查询,但它应该可以工作; - )
答案 1 :(得分:1)
select dg.id, dg.name
from Doc_group dg
where dg.id not in
(
select d.doc_group_id
from Doc d
where d.date NOT BETWEEN DATEDIFF(NOW() - 90 days) AND NOW()
)
答案 2 :(得分:1)
SELECT *
FROM Doc_group DG
INNER JOIN Type_group TG ON DG.ID = TG.doc_group_id
INNER JOIN Doc D ON DG.doc_group_id = D.doc_group_id
WHERE D.date BETWEEN NOW() - INTERVAL 90 DAY AND NOW()
答案 3 :(得分:0)
我不确定你想要什么, 但试试这个:
SELECT dg.*
FROM Doc_group AS dg
INNER JOIN Doc AS d ON dg.id = d.doc_group_id
WHERE d.date BEETWEEN DATEDIFF(NOW() - 90 days) AND NOW()