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

Select - uzyskanie najmłodszego rekordu

0 głosów
1,133 wizyt
pytanie zadane 27 czerwca 2016 w SQL, bazy danych przez Bartess Gaduła (3,630 p.)

Cześć.

Mam takie zapytanie:

select
    opiekun_kh_nr as kh_nr, opiekuni_nazwa as opiekun_nazwa, opiekun_kh_op_idx, opiekun_kh_ts
from
    v_opiekun_kh
where 
    opiekun_kh_nr = 71000014 and opiekuni_oddzial = 1

W wyniku dostaję:

71000014	Piotrek	1009	2015-12-15 00:00:00
71000014	Jasiek	1008	2016-06-22 10:24:15

Jak zapisać warunek where, by w wyniku dostać tylko jeden rekord, najnowszy, czyli Jaśka z 22. czerwca, a jednocześnie nie było to "order by opiekun_kh_ts desc limit 0,1' ?

4 odpowiedzi

+1 głos
odpowiedź 27 czerwca 2016 przez krunner Bywalec (2,180 p.)
select
   opiekun_kh_nr as kh_nr, 
   opiekuni_nazwa as opiekun_nazwa, 
   opiekun_kh_op_idx, 
   opiekun_kh_ts
from
   v_opiekun_kh
where 
   opiekun_kh_ts = (select max(opiekun_kh_ts) from v_opiekun_kh;
	

Chyba jak wyżej. Jeżeli jest kilku z tym samym timestampem to również innymi metodami dostaniesz kilka rekordów.

komentarz 28 czerwca 2016 przez Bartess Gaduła (3,630 p.)
Dobra podpowiedź, dodatkowe warunki zapobiegają większej liczbie wyników. Identyczny timestamp w moim przypadku w praktyce bardzo mało prawdopodobne.

Dzięki.
0 głosów
odpowiedź 27 czerwca 2016 przez mbabane Szeryf (79,260 p.)
edycja 27 czerwca 2016 przez mbabane

moze

​SELECT max(tabela.data), id 
FROM tabela;​

ale jesli w tabeli jest kilka rekordow z najwiekszymi datami to nie wiem w sumie czy zwraca pierwsza napotkana czy losowa z tych napotkanych, a zeby wszystkie takie rekordy wypisalo to mozna

SELECT id 
FROM tabela
WHERE tabela.data = (SELECT max(tabela.data) FROM tabela);

 

komentarz 27 czerwca 2016 przez mbabane Szeryf (79,260 p.)
chociaz to pierwsze teraz testuje (bo dawno tych funkcji jakos nie uzywalem) i nie wiem czemu, date bierze ok, ale id bierze pierwsze z brzegu z zupelnie inna data.
–1 głos
odpowiedź 27 czerwca 2016 przez CzikaCarry Szeryf (75,340 p.)

A nie lepiej po prostu

ORDER by id desc

?

komentarz 27 czerwca 2016 przez Bartess Gaduła (3,630 p.)

Przecież napisałem, żeby nie było to z order by o raz limit... Wg Twojego pomysłu nie uzyskam najmłodszego rekordu.

Chodzi mi o uzyskanie tego mniej więcej w sposób "max opiekun_kh_ts". Ktoś ma jakiś pomysł?

–1 głos
odpowiedź 27 czerwca 2016 przez Ehlert Ekspert (215,230 p.)

Dlaczego nie możesz użyć order by date? Przecież po to jest, chyba że w treść jakiegoś durnego polecenia wyklucza order.

Inny sposób aby wyciągać „najświeższe” rekordy to dodatkowa kolumna int record_age z autoinkrementacją. Wtedy:

--...
ORDER BY record_age DESC
LIMIT 1;

 

komentarz 27 czerwca 2016 przez Bartess Gaduła (3,630 p.)

Tyle, to ja wiem... ale napisałem:

Jak zapisać warunek where, dostać tylko jeden rekord, najmłodszy, a jednocześnie nie było to "order by opiekun_kh_ts desc limit 0,1' ?

Podobne pytania

0 głosów
2 odpowiedzi 1,920 wizyt
0 głosów
1 odpowiedź 395 wizyt
pytanie zadane 6 czerwca 2016 w C i C++ przez Zaka Nowicjusz (150 p.)
0 głosów
1 odpowiedź 914 wizyt
pytanie zadane 28 stycznia 2016 w PHP przez McShadow Obywatel (1,050 p.)

93,727 zapytań

142,668 odpowiedzi

323,283 komentarzy

63,287 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...