Autor | Zpráva | ||
---|---|---|---|
slon_cz Profil |
#1 · Zasláno: 18. 1. 2019, 15:39:18
Dobrý den, chtěl by se zeptat, pokud mám sql tabulku
nazev | datum | id | zaz 1 | blabl1 | 1 | zaz 2 | blabl2 | 2 | zaz 3 | blabl3 | 3 | zaz 4 | blabl4 | 4 | zaz 5 | blabl5 | 5 | Budu chtit do databaze zapsat radek s zaz 2 | blabl6 | --- a potreboval bych zjistit, kdy naposledy tam byl zaznam se stejnym obsahem pridan. Tedy, potreboval bych zjistit jaky je pocet radku mezi poslednim zaznamem a zaznamem s obsahem nazev = zaz2, tedy abych nějakým způsobem získal číslo "3" - mezi poslednim zaznamem (zaz 5 | blabl5 | 5 |) a hledanym zaznamem (zaz 2 | blabl2 | 2 |), jsou mezi nimi "3" dalsi zaznamy. Je možné toto získat? Snažím se to vyřešit, bohužel ani podle google si mi nedaří najít návod.. |
||
Joker Profil |
#2 · Zasláno: 18. 1. 2019, 16:36:51
slon_cz:
Tak nejdřív bude potřeba najít ten předchozí záznam: SELECT datum FROM tabulka WHERE nazev="zaz 2"
a pak zjistit počet novějších: SELECT COUNT(id) FROM tabulka WHERE datum > *datum* - pokud ten nový teprve přidávám, nebo DATUM BETWEEN *datum staršího* AND *datum novějšího*.
|
||
slon_cz Profil |
#3 · Zasláno: 18. 1. 2019, 17:36:53
Vůbec mě nenapadlo brát to podle data přidání, pořád jsem se soustředil jen na počet řádků, omlouvám se a děkuji za radu :)
|
||
Keeehi Profil |
#4 · Zasláno: 18. 1. 2019, 21:45:30
Datum se použít dá, ovšem problém je, že pokud bude existovat další záznam se stejného data (resp. sekundy jelikož pravděpodobně jde o datetime nebo timestemp) tak to může (ale nemusí) být o jedna špatně. ID je unikátní, takže tam tento problém hrozit nebude. Samozřejmě to vyžaduje, aby ID byla nějaká rostoucí řada ale to podle ukázky platí.
Také by ty dva dotazy by měly jít spojit do jednoho. SELECT COUNT(*) FROM tabulka WHERE id > ( SELECT MAX(id) FROM tabulka WHERE nazev="zaz 2" ) |
||
Joker Profil |
#5 · Zasláno: 18. 1. 2019, 21:46:50
Ještě se omlouvám, ten první dotaz by měl být
SELECT MAX(datum) FROM tabulka… , protože jich tam může být víc a chcete ten poslední.
|
||
Časová prodleva: 6 let
|
0