当我运行第二个括号(两个查询及其交集)时,我得到的行数与查询的行数不同SELECT * FROM Table1 WHERE (DateEntered >= '2015-06-13 00:00:00.000')'
但是在这里,我没有结果。我得到0行。你能告诉我我错在哪里,是一些语法还是其他一些东西?
SELECT *
FROM Table1
WHERE (DateEntered >= '2015-06-13 00:00:00.000')
AND NOT EXISTS (SELECT GID, MID
FROM Table1
WHERE MMID IN (SELECT MAX(MMID)
FROM Table1
WHERE DateEntered >= '2015-06-13 00:00:00.000'
GROUP BY GID, MID)
intersect
SELECT GID, MID
FROM Table1
WHERE MMID IN (SELECT MIN(MMID)
FROM Table1
WHERE DateEntered < '2015-06-13 00:00:00.000'
GROUP BY GID, MID))
预期输出
我只想要那些在6月13日之后从未发生过的价值观。因此,我相交并获得日期范围之前和之后存在的值。然后我用Not exists删除它。
你可以指导我吗?为什么我得到0行,即使应该有一些行。
答案 0 :(得分:2)
也许这就是你想要的?
SELECT GID, MID
FROM Table1
GROUP BY GID, MID
HAVING MIN(DateEntered) >= '2015-06-13';
这是基于您的解释,而不是您的查询。
答案 1 :(得分:1)
如果&#34;后面的选择语句不存在&#34;短语有一些行,你的主要select语句导致零行。 原因是,在&#34;不存在&#34;之后,您在主选择和子选择之间没有连接。 也许你想要的是这样的:
Select * From Table1 as A
WHERE (DateEntered >= '2015-06-13 00:00:00.000')
AND Not exists (Select 1 From Table1 as B
where A.gid = B.gid and A.mid = B.mid
And ... something else or your intersection
您必须连接选择结果。
也许a having子句更容易:
Select gid, mid from Table1
group by gid, mid
HAVING MIN(DateEntered) >= '2015-06-13 00:00:00.000';
在having子句中,检查组(此处:gid,mid)是否满足条件。
答案 2 :(得分:0)
相关子查询,因此子查询引用外部查询中的值。
SELECT *
FROM Table1 OuterTable1
WHERE (DateEntered >= '2015-06-13 00:00:00.000')
AND NOT EXISTS (SELECT NULL
FROM Tabel1 InnerTable1
WHERE InnerTable1.DateEntered < '2015-06-13 00:00:00.000'
AND InnerTable1.GID = OuterTable1.GID
AND InnerTable1.MID = OuterTable1.MID)