2016-03-16 9 views
9

Mam tabeli bazy danych commits z następującymi kolumnami:Jak grupy przez tydzień w PostgreSQL

id | author_name | author_email | author_date (znacznik czasu) | total_lines

zawartość Przykładowe to:

1 | abc | [email protected] | 2013-03-24 15:32:49 | 1234 
2 | abc | [email protected] | 2013-03-27 15:32:49 | 534 
3 | abc | [email protected] | 2014-05-24 15:32:49 | 2344 
4 | abc | [email protected] | 2014-05-28 15:32:49 | 7623 

Chcę uzyskać wynik następująco:

id | name | week | commits 
1 | abc | 1 | 2 
2 | abc | 2 | 0 

Szukałem online dla podobnych rozwiązań, ale nie mogliśmy uzyskać żadnych pomocnych nich.

Próbowałem tej kwerendy:

SELECT  date_part('week', author_date::date) AS weekly, 
     COUNT(author_email)   
FROM  commits 
GROUP BY weekly 
ORDER BY weekly 

Ale to nie jest odpowiedni wynik.

+0

Jak to jest błędne? Jaki jest problem? –

Odpowiedz

19

Jeśli masz kilka lat, powinieneś wziąć również pod uwagę rok. Jednym ze sposobów jest:

SELECT date_part('year', author_date::date) as year, 
     date_part('week', author_date::date) AS weekly, 
     COUNT(author_email)   
FROM commits 
GROUP BY year, weekly 
ORDER BY year, weekly; 

bardziej naturalny sposób napisać ten wykorzystuje date_trunc():

SELECT date_trunc('week', author_date::date) AS weekly, 
     COUNT(author_email)   
FROM commits 
GROUP BY weekly 
ORDER BY weekly; 
+0

Dzięki temu zadziałało :) – user6058071

+0

@GordonLinoff: W jaki sposób możemy uwzględnić tygodnie zero commit również w tym zapytaniu? Przetestowałem ten i daje on wszystkie wiersze z co najmniej jednym zatwierdzeniem. –

+0

@JilsonThomas. . . Jeśli masz pytanie, lepiej zadać pytanie zamiast komentarza. –