2011-10-19 25 views
6

Mam tabeli jak poniżej:czas epoka i MySQL kwerendy

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

która data jest w formacie pola epoki. Muszę zgrupować każdy wiersz, który należy do tego samego dnia i pokazać je w osobnej grupie. Jak mogę to zrobić w MySQL?

Dzięki.

Odpowiedz

13

Grupa By:

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

wyjściowa:

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

Zamówienie przez:

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

(choć w rzeczywistości można dostać taką samą kolejność używając tylko FROM_UNIXTIME () Lub surowy date wartość, ponieważ wszyscy oni stosu prawidłowo w próbie zamawiania)

wyjściowa:

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

ten przekształca uniksowego znacznika czasu do datetime mysql, a następnie wydobywa wartość daty od tej, która jest stosowana do grupy lub zlecenia klauzuli

Jeśli chcesz grupy na dzień, niezależnie od miesiąca i wykorzystania roku dzień() zamiast Date()

jednak można rozszerzyć na części o „grupie każdy wiersz po dniu” . jaki wynik chcesz pokazać? kiedy grupujesz coś, używasz jakiegoś zagregowanego procesora, takiego jak COUNT() lub SUMA() na polu w grupie.

MySQL Group Functions Reference

MySQL Date & Time Function Reference

+0

Chcę zgrupować każdy wiersz, który należy do tego samego dnia, co jest wyjątkowe. – silvercover

+0

OK, szukasz klauzuli ORDER BY, a następnie – JoshHetland

+0

Przepraszam, wydaje mi się, że nie rozumiem, czy mógłbyś dodać przykład wyjścia, którego potrzebujesz? – JoshHetland

1

Pomyśl, że to raczej tak, biorąc pod uwagę wymagania dla grupy.

Po prostu dodano MIN/MAX jako przykład agregacji domen.

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; 
Powiązane problemy