我正在尝试从“审核”表中获取area_id的最大日期,并仅返回那些最大date_finished大于一年的area_id(从今天开始)。表结构就是这样的
1) the 'review' table can have one or more reviews (multiple date_finished) for
each area_id
2) each region_id can have one or more area_ids
目标:返回每个region_id的评论数量,date_finished大于一年
示例数据:
region_id area_id date_finished
abc area_3 '01-01-2010 12:00:00 AM'
abc area_3 '06-01-2009 12:00:00 AM'
abc area_3 '02-01-2008 12:00:00 AM'
上面的预期结果应该是返回区域abc并且count应该是1(因为最大date_finished是2010年1月1日,并且距离今天的日期(2013)大于一年
我的sql如下。由于某种原因,它返回我上面描述的所有日期。它不返回最大日期,而是返回3个日期。我正在使用SQL Server 2008.谢谢!
select count(*)
from review group by area_id
having datediff(day,max(date_finished), getdate()) > 365
答案 0 :(得分:0)
您可以使用WHERE子句而不是HAVING
答案 1 :(得分:0)
你的问题对我来说并没有多大意义。 您想要计算满足特定条件的最大日期。 该逻辑解析为布尔值。 因为符合条件的日期存在或者不存在。
;WITH CTE (region_id, area_id, date_finished) AS
(
SELECT 'abc', 'area_3', CAST('2010-1-1' AS DATETIME) UNION ALL
SELECT 'abc', 'area_3', '2009-3-1' UNION ALL
SELECT 'abc', 'area_3', '2008-6-1'
)
SELECT region_id
,HasQualifyingVal = CASE WHEN COUNT(*) > 0 THEN 1 ELSE 0 END
FROM CTE
WHERE date_finished < DATEADD(YEAR, 1, date_finished)
GROUP BY region_id
答案 2 :(得分:0)
我认为你可以通过两个级别的聚合获得你想要的东西,首先是区域和区域,第二个是区域:
select r.region_id, count(*) as NumAreas, SUM(cnt) as NumReviews
from (select r.region_id, r.area_id, count(*) as cnt,
MAX(date_finished)as maxDF
from review r
group by r.region_id, r.area_id
) r
where DATEDIFF(day, maxDF, getdate()) > 365
group by r.region_id