Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> zapytanie podające najbliższą datę, wyliczoną wg 3 interwałów
areg
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 9.12.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
maly_swd
post
Post #2





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
areg
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 9.12.2010

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
maly_swd
post
Post #4





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

Ostrzeżenie: (0%)
-----


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]
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.09.2025 - 16:34