3

私のテーブル:

Dataid 日付 register_type read_value
77 2012-08-15 第20世代
77 2012-08-15 ソーラー 48
77 2012-08-16 第39世代
77 2012-08-16 第22世代
80 2012-07-11 第11世代
80 2012-07-12 ID23
91 2012-02-01 ID 4
91 2012-02-01 gen 59
91 2012-02-08 第18世代

毎日、read_values「gen」のみの合計を実行したいと思いregister_typeます。基本的に、クエリが次のテーブルを返すようにします。

dataid 日付 Daily_value
77 2012-08-15 20.00
77 2012-08-16 61.00
80 2012-07-11 11.00
91 2012-02-01 59.00
91 2012-02-08 18.00

次のクエリを試しましたが、うまくいきません。

select 
    dataid, 
    date_trunc('day', timestamp_localtime) as truncated_day,
    substring(cast(date_trunc('day', timestamp_localtime) as text)
              from 1 for 10) as date,            
    sum(read_value) as daily_gen
where register_type like ‘%gen%’
from table
group by dataid, date_trunc('day', timestamp_localtime) 
order by dataid, truncated_day

このクエリをどのように記述しますか?

4

2 に答える 2

5

Postgres で動作:

SELECT dataid, date, sum(read_value) AS daily_value
FROM   tbl
WHERE  register_type = 'gen'
GROUP  BY 1,2
ORDER  BY 1,2

または、列の名前dateは実際には日付以外のものですか?
それが実際に である場合、クエリを(にキャストする)timestampに置き換えると、動作するはずです。 ( Postgres で許可されている場合でも、最初から識別子などの予約語を使用しないでください。)datedate::datetimestampdate
date

于 2013-01-17T00:03:04.323 に答える
2

SQL Server では、次のように動作します。

SELECT SUM(read_value) AS daily_value, dataid, date
FROM (SELECT *, CONVERT(VARCHAR(10),date,105) AS newdate FROM Table)
WHERE type = 'gen'
GROUP BY newdate

MySQL の場合は、代わりにこれを使用します。

SELECT SUM(read_value) AS daily_value, dataid, date
FROM (SELECT *, DATE_FORMAT(newdate, '%d-%m-%Y') AS day FROM Table)
WHERE type = 'gen'
GROUP BY newdate

GROUP BY通常の集計関数をサポートしていないため、サブクエリが必要です。ただし、これdateは が日時の場合にのみ必要です。日付だけの場合は、日付だけを抽出する必要はありません。

于 2013-01-16T23:11:35.723 に答える