SQLite - Zliczanie ilości rekordów w przedziałach dniowych i godzinowych

0

Witam,

Mam zagwozdkę z obliczeniem ilości rekordów wsytępująych w danych dniach w przedziałach czasowych.
Prosze o pomoc.

Mam tabelę z czterema kolumnami:

  1. Data/Dzień (w formacie 'YYYY-MM-DD')
  2. Godzina przyjęcia paczki (w formacie 'HH:MM:SS')
  3. Numer paczki (8 cyfr)
  4. Numer magazynu (01 lub 02)

Potrzebuję uzyskać informację ile paczek (rozpoczynających sie od danej cyfry) zostało przyjętych do danego magazynu, danego dnia w danym godzinnym przedziale czasowym.
Proszę uprzejmie o rozpisanie zapytania umożliwiającego wyświetlenie wyniku w formie tabeli z następującymi kolumnami:

  1. Data i przedział godzinowy (lub 1. Data; 2. Przedział godzionowy)
  2. Ilość paczek, których pierwsza cyfra numeru to 0
    ..
  3. Ilość paczek, których pierwsza cyfra numeru to 0
  4. Numer magazynu

Pozdrawiam

1

Proszę wklej zapytanie SQL i strukturę tabeli, z którymi masz zagwozdkę.

1

Coś już zrobiłeś czy to jest zlecenie. Jak zlecenie to podeślij plik to ci napisze.

1

Rozumiem, że w kolumnie jedenastej zestawu wyników ma być ilość paczek rozpoczynających się od 9, a nie od 0?
No i czym jest przedział godzinowy? Chcesz go definiować w "WHERE" za każdym razem, czy masz jakieś stałe przedziały, w których chcesz analizować dane?

0

Tak, w kolumnie jedenastej ma być ilość paczek rozpoczynających się od 9.
Przedział godzinowy w pełnych godzinach, tj. od 00:00:00 do 00:59:59, od 01:00:00 do 01:59:59 itd.
W kwestii przedziałów godzinowych poradziłem sobie trochę na "okrętkę" w excelu łącząc kolumny z datą i godziną w jedną kolumnę, tak że teraz ma postać 'YYYY-MM-DD HH'.
SQL'a używam tak na prawdę z doskoku i ciężko mi poprawnie napisać pytanie akurat do tego co chcę uzyskać w tym wypadku.
Będę wdzięczny za każdą pomoc.

2

Pisane z "palca" bez testów to mogą być błędy. Jeszcze jest pytanie, jak masz trzymane daty i czas czy w odpowiednich typach, czy w ciągach znakowych.

select data, max(godzina), min(gdzina), sum( case substr(numer_paczki,0,1) = '0' then 1 else 0)
as paczki_z_0 , sum( case substr(numer_paczki,0,1) = '1' then 1 else 0)
as paczki_z_1 .....  sum( case substr(numer_paczki,0,1) = '9' then 1 else 0)
as paczki_z_9 , numer_magazynu from paczki group by numer_magazynu, data,  substr(godzina,0,2)
0

Po zasięgnięciu w lekturę udało mi się wykonać zapytanie, które podaje mi jedną z kolumn które chce uzyskać.
Na dobrą sprawę mógłbym rozpisac 20 zapytań, a później połączyć uzyskane tabele w jedną, ale chciałbym podrążyć temat.

Tabela "wejściowa" z 3 kolumnami:
-1. Data_Godzina (TEXT)
-2. Nr_Paczki (INTEGER)
-3. Nr_Magazynu (INTEGER)

Tabela "wyjściowa" (którą chcę uzyskać):
-1. Data_Godzina
-2. Ilość paczek, których pierwsza cyfra numeru to 0
..
-11. Ilość paczek, których pierwsza cyfra numeru to 9
-12. Numer magazynu

Zapytanie, które udało mi się napisać, które pokazuje ilość paczek, których pierwsza cyfra numeru to 0, która została przyjeta do magazynu 01:

SELECT Data_Godzina, COUNT(Nr_Paczki) as 'ilosc_paczek_0..._z_magazynu_01'
FROM Tabela
Where Nr_Paczki BETWEEN 00000001 AND 09999999 AND Nr_Magazynu = 01
GROUP BY Data_Godzina
ORDER BY Data_Godzina;

Prosiłbym o rozpisanie zapytania, które w wyniku da mi tabelę "wyjściową", którą chcę uzyskać.

0

undefined> ##### UglyMan napisał(a):
Pisane z "palca" bez testów to mogą być błędy. Jeszcze jest pytanie, jak masz trzymane daty i czas czy w odpowiednich typach, czy w ciągach znakowych.

select data, max(godzina), min(gdzina), sum( case substr(numer_paczki,0,1) = '0' then 1 else 0)
as paczki_z_0 , sum( case substr(numer_paczki,0,1) = '1' then 1 else 0)
as paczki_z_1 ..... sum( case substr(numer_paczki,0,1) = '9' then 1 else 0)
as paczki_z_9 , numer_magazynu from paczki group by numer_magazynu, data, substr(godzina,0,2)


Dziękuję!
Po kilku poprawkach (zaznaczyłem pogrubieniem) Twojego zapytania udało się :)
Poniżej zapytanie w formie, w której mi zadziałało pod SQLite3

```sql
select Data, min(Godzina), max(Godzina), 
sum(case when substr(numer_paczki,**1**,1) = '0' then 1 else 0 **END**) as paczki_z_0, 
sum(case when substr(numer_paczki,**1**,1) = '1' then 1 else 0 **END**) as paczki_z_1,
sum(case when substr(numer_paczki,**1**,1) = '2' then 1 else 0 **END**) as paczki_z_2,
sum(case when substr(numer_paczki,**1**,1) = '3' then 1 else 0 **END**) as paczki_z_3,
sum(case when substr(numer_paczki,**1**,1) = '4' then 1 else 0 **END**) as paczki_z_4,
sum(case when substr(numer_paczki,**1**,1) = '5' then 1 else 0 **END**) as paczki_z_5,
sum(case when substr(numer_paczki,**1**,1) = '6' then 1 else 0 **END**) as paczki_z_6,
sum(case when substr(numer_paczki,**1**,1) = '7' then 1 else 0 **END**) as paczki_z_7,
sum(case when substr(numer_paczki,**1**,1) = '8' then 1 else 0 **END**) as paczki_z_8,
sum(case when substr(numer_paczki,**1**,1) = '9' then 1 else 0 **END**) as paczki_z_9,
Numer_magazynu
from Paczki
group by Numer_magazynu,  
Data,
substr(Godzina,**1**,2)

1 użytkowników online, w tym zalogowanych: 0, gości: 1