Struktura tabeli

id_hours 	   	(INT PK)
id_application 	(INT FK)
time     		(FLOAT)	( chodzi po prostu o liczbę godzin )
week     		(INT)		( numer tygodnia )
year     		(INT)		
start_date 		(DATE)
end_date 		(DATE)

Nie są to wszystkie pola tabeli, ale tylko te istotne w tej kwestii.

Teraz próbuję utworzyć zapytanie, które zrealizuje następujące założenia :

  1. Pobierz wszystkie godziny (time) dla aplikacji (id_application) z przedziału tygodni 1 do 4 (week) roku 2010 (year)
  2. Może istnieć aplikacja, która posiada godziny na przełomie roku 2009 i 2010 ( czyli część godzin ma na rok 2009 a część na 2010)

Tak więc robię to w następujący sposób.

Krok pierwszy :

Pobieram z tabeli minimalną datę startu (start_date) oraz maksymalną datę końca (end_date) dla przedziału tygodni 1 do 4 (week) oraz roku 2010 (year)

Dzięki temu wiem, czy jakaś aplikacja nie masz jeszcze godzin w roku 2009.

Zapytanie

SELECT date(MIN(julianday(start_date))),  date(MAX(julianday(end_date))) FROM hours_application
WHERE
	year = 2010
AND
	week BETWEEN 1 AND 4
AND
	end_date <= '$control_date'
Zmienna $control_date to data YYYY-MM-DD ostatniego dnia 4 tygodnia, żeby nie wybiegał za bardzo w przyszłość z wynikami.

(Specyficzny sposób pobierania dat związany jest z używaniem SQLite).

Krok drugi :

Mając już datę początkową ($max_start) oraz końcową ($max_end) pobieram listę godzin (time)

Zapytanie

SELECT  H.time
FROM
	hours_application
WHERE
	julianday(start_date) >= julianday($max_start)
AND
	julianday(end_date) <= julianday($max_end)

Jednak nie udaje mi się osiągnąć zamierzonego celu.

Problem polega na tym, iż mam kontrolę nad tym, żeby zapytanie nie pobierało aplikacji powyżej daty końca ($max_end), ale nie kontroluje już tego by nie pobierał godzin dla aplikacji nie mających kontynuacji w roku 2010 - pobiera również te godziny, które są przypisane tylko do roku 2009 - a nie powinien.

Trochę już nad tym siedzę i już tylko kłębią mi się w głowie same błędne rozwiązania.

I teraz prośba do Was o wsparcie, sugestie i uwagi.

Z góry wielkie dzięki za wszelkie uwagi.

Pozdrawiam.