SQL嵌套选择,简单问题

时间:2015-06-22 19:35:17

标签: sql

我正在尝试从包含相同ID的多个endDates的列表中检索事件ID和endDate。使用max()和分组这一步很简单,但是我在努力的地方就是将这些结果限制在那些最终结束日期已经过去的地方。

我认为这需要使用嵌套SQL,但我无法让它工作。

记录:

eventID  | endDate
   1         05/01/2015
   1         05/01/2014
   1         05/01/2013
   2         05/01/2016
   3         07/01/2016
   4         05/01/2014
   4         05/01/2013

预期结果(今天= 2015年6月):

eventID  | endDate
   1         05/01/2015
   4         05/01/2014

此代码为我提供了所有事件及其最终结束日期的列表,从中我需要获取EndDate在今天之前的ContentID和EndDate。我已经尝试添加一个where语句来限制日期,但是在max(event.EndDate)之前执行,这不能得到我需要的结果。

 select event.ContentID, max(event.EndDate) as EndDate
 from event
 group by event.ContentID

非常感谢任何帮助!

4 个答案:

答案 0 :(得分:6)

使用having子句而不是基于聚合公式(如max():

)进行过滤的位置
SELECT event.ContentID
    ,max(event.EndDate) AS EndDate
FROM event
GROUP BY event.ContentID
HAVING max(event.EndDate) < getdate()

答案 1 :(得分:3)

在SQL-Server上你可以使用它:

SELECT event.ContentID, max(event.EndDate) as EndDate
FROM event
GROUP BY event.ContentID
HAVING MAX(event.EndDate) <= GETDATE()

关于MySQL:

SELECT event.ContentID, max(event.EndDate) as EndDate
FROM event
GROUP BY event.ContentID
HAVING MAX(event.EndDate) <= CURDATE()

答案 2 :(得分:0)

您可以使用第一个SQL作为外部SQL的from子句,因为第一个SQL创建了一个表。所以你可以这样做:

SELECT 
   contentID,
   EndDate
FROM
(
   SELECT
      event.ContentID AS ContentID,
      max(event.EndDate) AS EndDate
   FROM
      event
   GROUP BY
      event.contentID
)
WHERE
   MONTH(event.EndDate) = 6 --where the enddate has a month of June (6)

注意:我无法测试这个确切的代码,但这个想法应该回答你的问题。

答案 3 :(得分:0)

我提出以下似乎可以解决这个问题,但不确定这是最好的方法吗?

WebView