0

基準に基づいてデータを集計する必要があるという問題に取り組んでいます。状況は次のとおりです。

データベース上のアプリケーションからの消費データがあり、それを表に表示する必要があります。分、時間、日、月に基づいてデータを集計できます。たとえば、分単位でデータを集計すると、データはテーブルに表示され、最大 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 の単純な数値になります。)

4

1 に答える 1