2017-02-25 26 views
0

2つの列date_picked_begindate_pickedを含むテーブルがあり、それぞれに日付を含む複数の行があります。MySQL複数のデータ行を含む2つの日付の間のカウント時間

どのようにしてTIMESTAMPDIFFを使用して、データのすべての行の日付の差を秒単位で取得しますか。

次のクエリを試しましたが、最初の行からの秒単位の差異だけが返されます。 (合計時間を取得しようとしている別名total_picking_waiting_timeです)。

SELECT COUNT(pi.pi_id) AS num_picking_waiting_time, 
AVG(TIMESTAMPDIFF(SECOND, pi.date_picked_begin, pi.date_picked)) AS average_picking_waiting_time, 
TIMESTAMPDIFF(SECOND, pi.date_picked_begin, pi.date_picked) AS total_picking_waiting_time 
FROM (SELECT pi_id, type, date_picked_begin, date_picked, picker FROM pickwave_items) as pi 
WHERE pi.type = 'Picking (Waiting Time)' AND DATE(pi.date_picked) = '2017-02-25' AND pi.picker = 1 

また、このクエリでは、すべての行の2つの日付の平均時間が取得されていたと仮定しています。これは本当ですか?それは私が今思っているように合計時間を返すことではないと思っています。

答えて

1

まずありがとう、FROMのサブクエリは不要です。これはクエリに冗長性を追加し、実際には遅くなります(MySQLはそのようなサブクエリを実現するため)。その後

SUM()を使用し、トータルピッキング時間を得るために:コースのSUMの

SELECT COUNT(pi.pi_id) AS num_picking_waiting_time, 
     AVG(TIMESTAMPDIFF(SECOND, pi.date_picked_begin, pi.date_picked)) AS average_picking_waiting_time, 
     SUM(TIMESTAMPDIFF(SECOND, pi.date_picked_begin, pi.date_picked)) AS total_picking_waiting_time 
FROM pickwave_items as pi 
WHERE pi.type = 'Picking (Waiting Time)' AND 
     DATE(pi.date_picked) = '2017-02-25' AND 
     pi.picker = 1; 
+0

ああ。どうもありがとうございました!それが私に許されるとき、私は答えを受け入れるだろう。私はサブクエリが不要であることを知らせてくれてありがとう、私は数ヶ月前に数ヶ月前にそれを試したときに正しく動作しなかったと誓っていたかもしれませんが、今度は明らかに同じ結果を返しています:)再度ありがとう –

関連する問題