Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: dwa razy count/sum na tej samej tablicy na podstaie dwóch pól DATETIME
Forum PHP.pl > Forum > Bazy danych > MySQL
ximum
Posiadam tablicę z listą zgłoszeń, każde zgłoszenie posiada datę utworzenia oraz datę zakończenia. Chciałbym uzyskać informację ile zgłoszeń zostało utworzonych i zakończonych w konkretnych miesiącach. Zapytanie ma zwrócić tabelę rok, miesiąc, ilość zgłoszeń utworzonych, ilość zgłoszeń zakończonych. Zliczenie ma się odbywać na podstawie daty utworzenia i daty zakończenia. Zaznaczam, że zgłoszenie utworzone np w lutym, może być zakończone w kwietniu i powinno ono zostać uwzględnione jako zgłoszenie utworzone w lutym a zakończone w kwietniu.

Póki co doszedłem do tego typu zapytań:

informacja na temat zgłoszeń utworzonych w poszczególnych mc:
SELECT YEAR( created ) as data , MONTH( created ) as miesiac , COUNT( id ) as ilosc
FROM tickets
GROUP BY YEAR( created ) , MONTH( created );

informacja na temat zgłoszeń zakończonych w poszczególnych mc:
SELECT YEAR( closed) as data , MONTH( closed) as miesiac , COUNT( id ) as ilosc
FROM tickets
GROUP BY YEAR( closed) , MONTH( closed);

Pytanie moje jak zrobić, żeby wynik uzyskać w jednej tabeli za pomocą jednego zapytania do bazy??

Udało mi się stworzyć jeszcze takie zapytanie:
SELECT YEAR( created ) AS rok, MONTH( created ) AS miesiac, COUNT( created ) AS utworzone, SUM( if( closed >0, 1, 0 ) )
FROM tickets
GROUP BY YEAR( created ) , MONTH( created )

Problem w tym, że to zlicza TYLKO zamknięte zgłoszenia z jednego konkretnego miesiąca, tzn zlicza zgłoszenia utworzone np w lutym i podaje ile zgłoszeń utworzonych w lutym zostało zakończonych w lutym, a jak już wspomniałem w lutym pojawiają się też zamknięte zgłoszenia które były utworzone w styczniu lub grudniu lub jeszcze wcześniej.
#luq
Prawdopodobnie pomoże Ci informacja że można jako kolumnę dawać subquery, które zwraca 1 rekord.

Przykład z jakiejś tam mojej bazy:
  1. SELECT (SELECT COUNT(price) FROM item AS i2 WHERE i2.price = i.price) AS foo, price FROM item AS i GROUP BY price
ximum
Problem rozwiązany za Twoją radą smile.gif

Poniżej zapytanie które skonstruowałem. Czy to prawda że zamiast COUNT (id) lepiej jest dawać COUNT(1) questionmark.gif

SELECT YEAR( created ) AS rok, MONTH( created ) AS miesiac, COUNT( id ) AS ilosc, (

SELECT COUNT( id )
FROM tickets AS z2
WHERE (MONTH( z2.closed ) = MONTH( z.created ) AND YEAR( z2.closed ) = YEAR( z.created ))

)
FROM tickets AS z
GROUP BY YEAR( created ) , MONTH( created )

Kolejne pytanie jeszcze jakie mi się nasuneło to czy lub jak takie subquery zapisać jako zmienną, wyświetlić oczywiście, oraz w nastpnej kolumnie uzyc jako dzielnika, ponieważ w następnej kolumnie sumuje wartość zgłoszeń, a w następnej kolumnie chciałbym uzyskać średnią dzieląc zsumowaną kwotę przez ilość zamkniętych zgłoszeń?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.