0

Oracle の 2 つの UNIX タイムスタンプ間の時間に基づいてデータを集計しようとしているクエリがあります。最も難しいのは、クエリに何も問題が見られなくても、「 ORA-00936: 式が見つかりません」というエラーが表示されることです。ここで専門家のアドバイスが必要です。以下はクエリです-

クエリ -

select DATE(FROM_UNIXTIME(C.DATETIMEORIGINATION)) the_date,
HOUR(FROM_UNIXTIME(C.DATETIMEORIGINATION)) the_hour,
count(c.RECORD_ID) the_count 
FROM TABLE_A C 
WHERE C.DATETIMEORIGINATION between 1380033019 AND 1379702408 
GROUP BY 1,2;

どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

2

the_dateフィールドを実際の日付として使用する場合:

select trunc(date '1970-01-01' + datetimeorigination / (24*60*60)) as the_date,
  to_char(date '1970-01-01' + datetimeorigination / (24*60*60),
    'HH24') as the_hour,
  count(record_id)
from table_a
group by trunc(date '1970-01-01' + datetimeorigination / (24*60*60)),
  to_char(date '1970-01-01' + datetimeorigination / (24*60*60), 'HH24');

THE_DATE  THE_HOUR COUNT(RECORD_ID)
--------- -------- ----------------
24-SEP-13 14                      1 
20-SEP-13 18                      1 

to_number()時間の値を数値として使用する場合は、そのフィールドを呼び出しでラップできます。これが表示用の場合は、日付も明示的にフォーマットする必要があります。

select to_char(date '1970-01-01' + datetimeorigination / (24*60*60),
    'YYYY-MM-DD') as the_date,
  to_char(date '1970-01-01' + datetimeorigination / (24*60*60),
    'HH24') as the_hour,
  count(record_id)
from table_a
group by to_char(date '1970-01-01' + datetimeorigination / (24*60*60),
    'YYYY-MM-DD'),
  to_char(date '1970-01-01' + datetimeorigination / (24*60*60), 'HH24');

THE_DATE   THE_HOUR COUNT(RECORD_ID)
---------- -------- ----------------
2013-09-24 14                      1 
2013-09-20 18                      1 

または、日付と時刻の 1 つのフィールドを一緒に使用します。

select to_char(date '1970-01-01' + datetimeorigination / (24*60*60),
    'YYYY-MM-DD HH24') as the_hour,
  count(record_id)
from table_a
group by to_char(date '1970-01-01' + datetimeorigination / (24*60*60),
    'YYYY-MM-DD HH24');

THE_HOUR      COUNT(RECORD_ID)
------------- ----------------
2013-09-24 14                1 
2013-09-20 18                1 

何を見たいか、何をしたいかによります。

集計に使用するフィールドに関係なく、group by節で同じ方法で指定する必要があります。たとえば、位置表記は使用できませんgroup by 1, 2betweenAそして、値が昇順でなければならないこと、または何も検出されないことは既に認識しています。

于 2013-10-02T18:10:34.173 に答える