Frage
Ich habe einen solchen Tisch:
id | date
---- | -----------
1 | 1319043263
2 | 1319043578
Welches Datumsfeldformat befindet sich in der Epoche. Ich muss jede Reihe, die zum selben Tag gehört, gruppieren und sie in einer separaten Gruppe zeigen. Wie kann ich das in MySQL machen?
Vielen Dank.
Lösung
Gruppiere nach:
SELECT COUNT(`id`) AS `Records`, DATE(FROM_UNIXTIME(`date`)) AS `Date`
FROM `table`
GROUP BY DATE(FROM_UNIXTIME(`date`))
Ausgabe:
Records | Date
--------------------------------
10 | 2011-10-19
10 | 2011-10-18
Sortieren nach:
SELECT `id`, FROM_UNIXTIME(`date`) AS `Date`
FROM `table`
ORDER BY DATE(FROM_UNIXTIME(`date`)) [ASC|DESC]
(Obwohl Sie in Wirklichkeit die gleiche Bestellung erhalten, nur von _unixtime () oder dem RAW date
Wert, da sie alle bei einem Bestellversuch richtig stapeln würden)
Ausgabe:
id | Date
--------------------------------
03 | 2011-10-19 12:00:00
02 | 2011-10-18 12:00:00
01 | 2011-10-17 12:00:00
Dies wandelt den UNIX -Zeitstempel in eine MySQL -DateTime um und extrahiert dann den Datumswert aus dem, der auf die Gruppierungs- oder Auftragsklausel angewendet wird
Wenn Sie tagsüber gruppieren möchten, unabhängig von Monat und Jahr Nutzungstag () anstelle von Datum ()
Könnten Sie jedoch den Teil um "Gruppen jede Reihe nach Tag" erweitern. Welches Ergebnis möchten Sie zeigen? Wenn Sie etwas gruppieren, verwenden Sie einen aggregierten Prozessor wie count () oder sum () auf einem Feld innerhalb der Gruppe.
Andere Tipps
Denken Sie, dass es eher so ist, wenn man die Anforderungen an die Gruppierung berücksichtigt.
Ich habe gerade Min/Max als Beispiel für die Domänenaggregation hinzugefügt.
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;