• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wybranie najbliższej daty SQL

Aruba Cloud PRO i VPS, Openstack, VMWare, MS Hyper-V
0 głosów
74 wizyt
pytanie zadane 23 listopada w SQL, bazy danych przez UczenVadera Początkujący (360 p.)
Witam!
Posiadam bazę danych, w której zapisuję daty. Chciałbym wybrać rekord, który jest najbliższy danemu dniu. Szukałem i nie znalazłem konkretnych odpowiedzi, bądź istniejące rozwiązania problemów nie za dobrze działały u mnie.

Formatowanie daty: date('Y-m-d H:i:s')

Przykład:

W bazie danych mam wpisane
2022-11-22 -> Dziś jest 23 nie pokażę tego rekordu
2022-11-23 -> Dziś jest 23 nie pokażę tego rekordu
2022-11-24 -> Dziś jest 23 więc pokażę ten rekord.
2022-11-25 -> Dziś jest 23 nie pokażę tego rekordu, ale pokażę go jak będzie 24

z góry dziękuję za pomoc.
komentarz 23 listopada przez Oscar Nałogowiec (27,430 p.)

@UczenVadera,  Trzeba bardziej sprecyzować pojęcie "najbliższy dzien". Czas się trochę dziwnie liczy - od wtorku do czwartku są tylko 2 dni, ale od czwartku do wtorku - 5 surprise

Czy chcesz dzien w przeszlości (najnowszy produkt, zdarzenie), czy w przyszłości (umawiasz wizytę u lekarza)? Bo tak najbliższy "dwukierunkowo" to trochę bez sensu.

komentarz 23 listopada przez UczenVadera Początkujący (360 p.)
Chodzi o to, że po prostu ma wybrać rekord, który ma w sobie datę z najbliższym dniem od aktualnego. Dziś jest 23.11.2022 w bazie mam np. 27.11.2022 i 30.11.20222, to ma jako pierwszy pokazać 27, jeżeli minie 27, to pokaże 30.
komentarz 23 listopada przez VBService Ekspert (204,430 p.)

Najpierw piszesz, że

2022-11-22 -> Dziś jest 23 nie pokażę tego rekordu
2022-11-23 -> Dziś jest 23 nie pokażę tego rekordu
2022-11-24 -> Dziś jest 23 więc pokażę ten rekord.
2022-11-25 -> Dziś jest 23 nie pokażę tego rekordu, ale pokażę go jak będzie 24

z czego można było wnioskować, że Tobie chodzi o dzień dzisiejszy + 1 dzień

później piszesz

wybrać rekord, który ma w sobie datę z najbliższym dniem od aktualnego. Dziś jest 23.11.2022 w bazie mam np. 27.11.2022 i 30.11.20222, to ma jako pierwszy pokazać 27, jeżeli minie 27, to pokaże 30.

czyli wersja, którą podał @areklipno;  jest IMHO tego czego szukasz.

2 odpowiedzi

+1 głos
odpowiedź 23 listopada przez areklipno Stary wyjadacz (11,240 p.)
wybrane 25 listopada przez UczenVadera
 
Najlepsza

Cześć,

a nie wystarczy po prostu założyć limitu na zwracane wiersze? Tzn.

select * 
from tabela
where data_tabela > 'twojadata'
order by data_tabela
limit 1

data_tabela - kolumna z datą w tabeli bazy danych

'twojadata' - interesująca Cię data.

Składnia może się nieco różnić w zależności od silnika bazy danych, ale takie podejście powinno wystarczyć.

komentarz 23 listopada przez VBService Ekspert (204,430 p.)
edycja 23 listopada przez VBService

Nie za bardzo bo

where data_tabela > 'twojadata'

"zwróci" wszystkie daty "większe" od podanej, a OP chodzi o podana data + 1 dzień

2022-11-22 -> Dziś jest 23 nie pokażę tego rekordu
2022-11-23 -> Dziś jest 23 nie pokażę tego rekordu
2022-11-24 -> Dziś jest 23 więc pokażę ten rekord.
2022-11-25 -> Dziś jest 23 nie pokażę tego rekordu, ale pokażę go jak będzie 24

komentarz 23 listopada przez areklipno Stary wyjadacz (11,240 p.)

@VBService - nie do końca...  ponieważ:

- warunek where pokaże wszystkie daty nowsze

- order by ułoży je w kolejności by najmniejsza/najwcześniejsza dostępna data była pierwsza

- limit 1 - pokaże tylko pierwszą (najwcześniejszą) dostępną w zwróconym uszeregowaniu datę.

komentarz 23 listopada przez VBService Ekspert (204,430 p.)

Ach, tak masz rację przeoczyłem LIMIT 1smiley

0 głosów
odpowiedź 23 listopada przez VBService Ekspert (204,430 p.)
edycja 23 listopada przez VBService

Sprawdź: DATE_ADD [ 1 ] [ 2 ]

DATE_ADD(NOW(), INTERVAL 1 DAY)
DATE_ADD('MyDate', INTERVAL 1 DAY)
komentarz 23 listopada przez UczenVadera Początkujący (360 p.)
To mi nic nie da, bo wyświetli tylko 1 dzień do przodu, potrzebuję wybrać rekord z datą, która jest najbliższa daty aktualnej.

Podobne pytania

0 głosów
2 odpowiedzi 116 wizyt
0 głosów
1 odpowiedź 412 wizyt
pytanie zadane 9 marca 2016 w PHP przez Filip31411 Dyskutant (8,840 p.)
+1 głos
1 odpowiedź 103 wizyt

89,758 zapytań

138,362 odpowiedzi

309,420 komentarzy

59,673 pasjonatów

Advent of Code 2022

Top 15 użytkowników

  1. 908p. - Argeento
  2. 877p. - nidomika
  3. 851p. - Michal Drewniak
  4. 848p. - Mikbac
  5. 846p. - rucin93
  6. 838p. - Łukasz Eckert
  7. 835p. - ssynowiec
  8. 822p. - TheLukaszNs
  9. 794p. - JMazurkiewicz
  10. 787p. - Hubert Chęciński
  11. 786p. - adrian17
  12. 760p. - Mawrok
  13. 756p. - overcq
  14. 752p. - Vinox
  15. 747p. - Fiji404
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...