Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: zapytanie podające najbliższą datę, wyliczoną wg 3 interwałów
Forum PHP.pl > Forum > Bazy danych > MySQL
areg
Witam,

proszę o pomoc w skonstruowaniu poprawnego zapytania podającego najbliższą datę (przyszłą) zdarzenia, które wydarzy się najszybciej z wszystkich wpisanych zdarzen np jedno za 3 lata drugie za 5 miesięcy lub inne za 450 dni itd, zależnie od tego jak uzytkownicy wpisali, a maja do dyspozycji 3 rozne interwaly: Y, M, D
Tabela 'zdarzenia' wyglada mniej wiecej tak:
id, data_wpisu, wykonac_za, interwal
1, 2010-12-09, 3, Y
2, 2010-12-09, 5, M
3, 2010-12-09, 450, D
próbowałem m.in. tak:
SELECT MIN(t1.ADDDATE(data_wpisu, INTERVAL, wykonac_za,Y) as data_plan, t2.ADDDATE(data_wpisu, INTERVAL, wykonac_za,M) as data_plan, t3.ADDDATE(data_wpisu, INTERVAL, wykonac_za,D) as data_plan) FROM zdarzenia as t1, zdarzenia as t2, zdarzenia as t3 WHERE t1.interwal="Y" and t2.interwal="M" and t3.interwal="D"
oczywiście, powyższe nie działa.
Wdzięczny będę za wszelkie sugestie.

pozdrawiam
Arek
maly_swd
  1. SELECT
  2. CASE
  3. WHEN inter='D' THEN DATE_ADD(data_wpisu, INTERVAL wykonac_za DAY)
  4. WHEN inter='M' THEN DATE_ADD(data_wpisu, INTERVAL wykonac_za MONTH)
  5. WHEN inter='Y' THEN DATE_ADD(data_wpisu, INTERVAL wykonac_za YEAR)
  6. END AS kiedy
  7.  
  8. FROM test
  9. ORDER BY kiedy


zmienilem tylko interval na inter
areg
Dzieki za p-odpowiedz. Jednak podrąże jeszcze temat. W rozwiazaniu jakie podal maly_swd zapytanie zwroci duzo rekordow, z ktorych oczywiscie po odpowiednim posortowaniu interesujacy mnie rekord bedzie pierwszy albo ostatni. Co zrobic zeby dostac w odpowiedzi tylko jeden rekord (walka o wydajność / czas działania). Czy funkcja MINimum moze byc zagnieżdżona w drugiej funkcji MIN?
Czy ktokolwiek widzi tu możliwość użycia funkcji MIN?
maly_swd
SELECT min(kiedy) a, max(kiedy) b from (
SELECT
CASE
WHEN inter='D' THEN DATE_ADD(data_wpisu, INTERVAL wykonac_za DAY)
WHEN inter='M' THEN DATE_ADD(data_wpisu, INTERVAL wykonac_za MONTH)
WHEN inter='Y' THEN DATE_ADD(data_wpisu, INTERVAL wykonac_za YEAR)
END AS kiedy

FROM test
ORDER BY kiedy) as cos[sql][/sql]
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.