0

私はmysqlに次のようなデータを含むテーブルを持っています:

id    from                  to
----  --------------------  ---------------------------
1     2013-01-31 23:50:00   2013-02-02 09:00:00
2     2013-02-05 11:21:12   2013-02-08 01:01:01
3     2013-02-08 17:33:44   2013-02-08 18:22:55
4     2013-02-12 01:40:12   2013-02-12 02:00:59
5     2013-02-28 01:40:12   2013-03-02 02:00:59

各行の「from」列と「to」列の違いを見つけるための Mysql クエリまたは php コードが必要です。行 1 必要な出力は次のようになります。

行 1 の 2013-01-31 23:50:00 と 2013-02-02 09:00:00 の違い

2013-01-31 : 600 秒 (24:00:00 - 23:50:00 => 600 秒)

2013-02-01 : 86400 秒 (24:00:00 - 00:00:00 => 86400 秒)

2013-02-02 : 32400 秒 (09:00:00 - 00:00:00 => 32400 秒)

など...行ごとに

MySQL コマンドが推奨されます。この出力を作成できるコードはどれですか? この出力を作成するための特定の関数が php または mysql にありますか?

私はこれらの答えを読みました: mysqlは毎日2つの日付/時刻の間の秒数を計算します

MySQL: 2 つのタイムスタンプの差を秒単位で取得する方法

しかし、これらは私の答えではありません。

情報:リンク1は私の質問のような質問ですが、「コマンドは日ごとにグループ化する必要がある」ため、答えは真実ではありませんが、どのように?! 2番目は私の質問ではありませんが、リンク2と重複しているとマークされた質問1であり、真実ではありません。

4

1 に答える 1

1

日付の表があるとします。その場合は、joinまたは相関サブクエリを使用できます。

select d.date,
       (select sum(timestampdiff(second,
                                 greatest(d.date, t.from),
                                 least(d.date, t.to)
                                ))
        from table t
        where t.to >= d.date and
              t.from < date_add(d.date, interval 1 day)
       ) as NumSeconds
from dates d;

dates何らかのテーブルがない場合は、その場で作成できます。

from (select date('2013-01-31') as date union all
      select date('2013-02-01') union all
      . . .
     ) dates
于 2015-08-17T10:47:31.453 に答える