我正在处理一个需要根据标准聚合数据的问题。情况如下:
我有来自数据库应用程序的消费数据,我需要将其显示在表格中。人们可以根据分钟、小时、日和月聚合数据。例如,当人们按分钟聚合数据时,数据将显示在一个表格中,最多显示 10 行(但这是棘手的部分,在此示例中,行是基于小时的)。因此,与其说我想要(分钟聚合的)前 10 行,不如说我必须找到相当于显示 10 个不同小时的结果的条目数。
我试图进行查询,此时我是为了更好地说明问题(查询不会运行):
SELECT count(*) as COUNT,
year([CONSUMPTION_DATE]) as YEAR_BY_MINUTE,
month([CONSUMPTION_DATE]) as MONTH_BY_MINUTE,
day([CONSUMPTION_DATE]) as DAY_BY_MINUTE,
DATEPART ( hour , [CONSUMPTION_DATE] ) as HOUR_BY_MINUTE,
DATEPART ( minute , [CONSUMPTION_DATE]) as MINUTE_BY_MINUTE
FROM [CONSUMPTION_TABLE]
where (YEAR_BY_MINUTE, MONTH_BY_MINUTE, DAY_BY_MINUTE, HOUR_BY_MINUTE) IN
(select top 10 year([CONSUMPTION_DATE]) as YEAR_BY_HOUR,
month([CONSUMPTION_DATE])as MONTH_BY_HOUR,
day([CONSUMPTION_DATE]) as DAY_BY_HOUR,
DATEPART ( hour , [CONSUMPTION_DATE] ) as HOUR_BY_HOUR
FROM [CONSUMPTION_TABLE]
where [CONSUMPTION_DATE] between '2018-01-18' and '2018-03-20'
GROUP BY year([CONSUMPTION_DATE]),
month([CONSUMPTION_DATE]),
day([CONSUMPTION_DATE]),
DATEPART ( hour , [CONSUMPTION_DATE])
)
GROUP BY year([CONSUMPTION_DATE]),
month([CONSUMPTION_DATE]),
day([CONSUMPTION_DATE]),
DATEPART ( hour , [CONSUMPTION_DATE] ),
DATEPART ( minute , [CONSUMPTION_DATE] )
我也一直在尝试另一种方式,但查询运行时出现错误想法:
;with MinuteGroup as
(
select year([CONSUMPTION_DATE]) as YEAR_GROUP_MINUTE,
month([CONSUMPTION_DATE])as MONTH_GROUP_MINUTE,
day([CONSUMPTION_DATE]) as DAY_GROUP_MINUTE,
DATEPART ( hour , [CONSUMPTION_DATE] ) as HOUR_GROUP_MINUTE,
DATEPART ( minute , [CONSUMPTION_DATE] ) as MINUTE_GROUP_MINUTE
FROM [CONSUMPTION_TABLE]
where [CONSUMPTION_DATE] between '2018-01-18' and '2018-03-20'
group by year([CONSUMPTION_DATE]),
month([CONSUMPTION_DATE]),
day([CONSUMPTION_DATE]),
DATEPART ( hour , [CONSUMPTION_DATE] ),
DATEPART ( minute , [CONSUMPTION_DATE] )
)
select * from MinuteGroup where
(YEAR_GROUP_MINUTE, MONTH_GROUP_MINUTE, DAY_GROUP_MINUTE, HOUR_GROUP_MINUTE)
in ( select year([CONSUMPTION_DATE]),
month([CONSUMPTION_DATE]),
day([CONSUMPTION_DATE]) ,
DATEPART ( hour , [CONSUMPTION_DATE] )
FROM [CONSUMPTION_TABLE]
where [CONSUMPTION_DATE] between '2018-01-18' and '2018-03-20'
group by year([CONSUMPTION_DATE]),
month([CONSUMPTION_DATE]),
day([CONSUMPTION_DATE]),
DATEPART ( hour , [CONSUMPTION_DATE])
)
另一种方法更容易做到这一点,或者我必须在查询中进行哪些更改才能使其正常工作?
PS:我将不得不将其转移到 HQL,因此如果更容易,我也会接受该答案。
(我汇总的单位时间将是一个简单的数字 1,2,3,4,5,...)