我正在尝试从一个'review‘表中获取一个区域的最大日期,并且只返回那些最大date_finished大于一年(从今天的日期开始)的area_id _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
目标:返回date_finished大于一年的每个region_id的评论次数
示例数据:
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,计数应该是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
发布于 2013-01-11 15:47:49
我认为你可以通过两个级别的聚合得到你想要的东西,第一个级别是地域和面积,第二个级别是地域:
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
发布于 2013-01-11 15:42:05
您可以只使用WHERE子句,而不使用
发布于 2013-01-11 15:42:40
你的问题对我来说没有多大意义。您需要满足特定条件的最大日期的计数。该逻辑将解析为布尔值。因为符合条件的日期要么存在,要么不存在。
;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
https://stackoverflow.com/questions/14281224
复制相似问题