0

私は発券システムを使用しており、エージェントが配達に遅れているかどうかを確認するクエリを作成する必要があります。

これは私が今まで持っているものであり、必要なものです:

  • 私は持っている:ticket_id time_created
  • 2 つの間の time_created が 24 時間よりも大きい同じ ticket_id をすべて選択する必要があります。

例えば:

ticket_id time_created 
1         2013-08-19 12:11
1         2013-08-17 12:07
1         2013-08-17 12:00
2         2013-08-19 12:11
2         2013-08-19 12:10

結果

ticket_id time_difference
1             48:04

同じ ticket_id 番号のチケットを確認するだけです。

編集では、id 列もあり、1,2 から 2,3 (この場合はすべて ticket_id=1) と 4,5 (ticket_id=2) の間の値をチェックする必要があります。

4

3 に答える 3

0

このクエリは、最後の日付と最も低い日付の差をチェックします。これが必要ですか、それとも最後の日付と最後から 2 番目の日付の差が必要ですか

SELECT ticket_id, 
DATEDIFF(MAX(TIME_CREATED),MIN(TIME_CREATED)) AS DiffDate 
FROM TABLE1 
    group by ticket_id

このクエリは、最新の 2 つのチケットの違いを見つける必要があります。

SELECT ticket_id, TIMEDIFF(MAX(A.TIME_CREATED),

             (SELECT MAX(TIME_CREATED) FROM TICKETS B 
              where B.TIME_CREATED <MAX(A.TIME_CREATED)))  AS DiffDate 
    FROM TICKETS A
        group by ticket_id

考えてみると、これは

連続する 2 つの行の日付の差

そこでクエリを試すことができますか...

SELECT ticketid, extract(epoch from tdiff) FROM ( SELECT ticketid, ticketdate - lag(ticketdate) OVER (partition by ticketid ORDER BY ticketdate) AS tdiff,dense_rank() OVER (partition by ticketid ORDER BY ticketdate) AS rank FROM Table1 ORDER BY ticketid) x WHERE ランク = 2;

そしていじる

http://sqlfiddle.com/#!1/0e213/1

于 2013-08-19T14:44:02.727 に答える
0

lag()違いを得るには、MySQL がサポートしていない関数と同等のものが必要です。相関サブクエリでも同じ効果が得られます。

select ticket_id, timediff(nextTimeCreated, time_created)
from (select t.*,
             (select time_created
              from t t2
              where t2.ticket_id = t.ticket_id and
                    t2.time_created > t.time_created
             ) as nextTimeCreated
      from t
     ) t
where nextTimeCreated > time_created + interval 1 day;
于 2013-08-19T14:40:53.927 に答える
0

そのような何かがうまくいくかもしれません:

select ticket_id, min(a.time_created), max(b.time_created),
       TIMESTAMPDIFF(HOUR,min(a.time_created), max(b.time_created))
  from tbl AS a JOIN tbl AS b USING(ticket_id)
  where a.time_created < (b.time_created - INTERVAL 1 DAY)
  group by(a.ticket_id);

生産:

+------------+--------------------------------+--------------------------------+--------------------------------------------------------------+
| TICKET_ID  |      MIN(A.TIME_CREATED)       |      MAX(B.TIME_CREATED)       | TIMESTAMPDIFF(HOUR,MIN(A.TIME_CREATED), MAX(B.TIME_CREATED)) |
+------------+--------------------------------+--------------------------------+--------------------------------------------------------------+
|         1  | August, 17 2013 12:00:00+0000  | August, 19 2013 12:11:00+0000  |                                                           48 |
+------------+--------------------------------+--------------------------------+--------------------------------------------------------------+

http://sqlfiddle.com/#!2/4af76e/7を参照してください。

TIMESTAMPDIFFで結果を要求するためにここで使用したことに注意してくださいHOUR。ドメインの仕様がわからないため、値TIMEDIFFの範囲が限られているためTIME( ≈ 34 日 )、ここでは使用しません。

于 2013-08-19T14:38:20.950 に答える