Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rekordy z ostatniego dnia miesiąca i przedział czasowy
Forum PHP.pl > Forum > Bazy danych > MySQL
peter_z
Ostatnio nie mogę sobie poradzić z poniższym zagadnieniem.
Mam tabelę kursy i w niej dzienne wyceny aktywów.
Potrzebuję wyciągnąć z niej wyceny z ostatniego dnia miesiąca, ale ten dzień nie zawsze wypada w kalendarzowym końcu miesiąca.
Następujące zapytanie wyławia taki rekord bez problemu:
  1. SELECT * FROM `kursy` WHERE `name` = 'nazwa' AND `update-date` LIKE '2008-11%' ORDER BY `update-date` DESC LIMIT 1;


Teraz powstaje pytanie jak to zrobić, aby wyłowić rekordy z zakresu '2007-01' do '2010-01' biorąc pod uwagę powyższe założenia.

Oczywiście mogę zrobić wielokrotne UNION (zwiększając miesiąc), ale może jest jakiś lepszy sposób, który zrobi jakąś pętlę zapytań z dodawaniem miesiąca?
  1. (SELECT * FROM `kursy` WHERE `name` = 'nazwa' AND `update-date` LIKE '2008-10%' ORDER BY `update-date` DESC LIMIT 1)
  2. UNION
  3. (SELECT * FROM `kursy` WHERE `name` = 'nazwa' AND `update-date` LIKE '2008-11%' ORDER BY `update-date` DESC LIMIT 1)


Będę wdzięczny za propozycje.

UPDATE
Kolumna to date, ale mogę zmienić, gdyby to coś pomogło.

Pozdrawiam,
Piotr Zaniewicz
Mchl
Jakiego typu jest kolumna update-date ?
peter_z
Kolumna to date.
Mchl
Można zacząć od tego:
Kod
SELECT t1.* FROM kursy AS t1
CROSS JOIN
(SELECT name, MAX(`update-date`) AS `update-date` FROM kursy GROUP BY name, MONTH(`update-date`)) AS t2
USING(name, `update-date`);
peter_z
Ekstra, działa wyśmienicie.
Dodałem jeszcze grupowanie wg poszczególnych lat, bo tak wyświetlał tylko 12 miesięcy.

A tak wygląda działający SQL, gdyby ktoś potrzebował:
  1. SELECT t1.* FROM `kursy` AS t1
  2. CROSS JOIN
  3. (SELECT `name`, MAX(`update-date`) AS `update-date` FROM `kursy` WHERE `name` LIKE 'nazwa' GROUP BY `name`, YEAR(`update-date`), MONTH(`update-date`)) AS t2
  4. USING(`name`, `update-date`)



Dziękuję serdecznie za pomoc i pozdrawiam,

Piotr Zaniewicz
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.