6

I have a table like this:

id   | date
---- | -----------
1    | 1319043263
2    | 1319043578

which date field format is in epoch. I have to group every row that belongs to same day and show them in a separate group. How can I do that in MySQL?

Thanks.

4

2 に答える 2

15

グループ化:

SELECT COUNT(`id`) AS `Records`, DATE(FROM_UNIXTIME(`date`)) AS `Date` 
FROM `table`
GROUP BY DATE(FROM_UNIXTIME(`date`))

出力:

    Records | Date
--------------------------------
      10    | 2011-10-19
      10    | 2011-10-18

注文方法:

SELECT `id`, FROM_UNIXTIME(`date`) AS `Date`
FROM `table`
ORDER BY DATE(FROM_UNIXTIME(`date`)) [ASC|DESC]

(ただし、実際には FROM_UNIXTIME() または生のdate値のみを使用して同じ順序を取得します。これは、順序付けの試行ですべてが適切にスタックされるためです)

出力:

      id    | Date
--------------------------------
      03    | 2011-10-19 12:00:00
      02    | 2011-10-18 12:00:00
      01    | 2011-10-17 12:00:00

これにより、UNIX タイムスタンプが mysql 日時に変換され、グループ化または順序句に適用される日付値が抽出されます。

月と年に関係なく日ごとにグループ化したい場合は、DATE() の代わりに DAY() を使用します。

ただし、「各行を日ごとにグループ化する」という部分を拡張できますか。どんな結果を見せたいですか?何かをグループ化するときは、グループ内のフィールドで COUNT() や SUM() などの集計プロセッサを使用します。

MySQL グループ関数リファレンス

MySQL の日付と時刻関数のリファレンス

于 2011-10-19T18:03:35.907 に答える
1

グループ化の要件を考えると、それはむしろそのようなものだと思います。

ドメイン集約の例として MIN/MAX を追加しました。

SELECT
  DATE(FROM_UNIXTIME(`epoch`)) AS `GroupedDate`,
  MIN(FROM_UNIXTIME(`epoch`)) AS `DayStart`,
  MAX(FROM_UNIXTIME(`epoch`)) AS `DayEnd`
FROM
  `timestamps`
GROUP BY
  DATE(FROM_UNIXTIME(`epoch`))
ORDER BY
   `epoch` ASC;
于 2013-06-13T20:21:13.053 に答える