Adott a következő MySQL tábla az alábbi adatokkal: http://pastebin.com/V0bujAhD
Hogyan keressük meg azokat a sorokat, amelyek nem jó helyen vannak, ha az ID értékek szigorúan egymás után következnek úgy, hogy a hozzájuk rendelt dátum is egymás után kell következzen?
HINT:
A fenti példában a 343 és 352 nincsenek a helyükön, (2014-01-17 helyett 2014-01-16-on vannak), de előfordulhatnak egyéb anomáliák is.
Külső segédszkriptekkel meg tudom keresni, viszont van-e esetleg erre tiszta mysql megoldás?
Megoldás:
SELECT DISTINCT
t1.*
FROM
ttt t1 INNER JOIN ttt t2
ON t1.id>t2.id
WHERE
t1.datum<t2.datum
A Pastebines adatok sajnos nem frissek, abban nincs hiba. :)
- 3497 megtekintés
Hozzászólások
Szia,
Mit értesz azon hogy nincsenek a helyükön? Sajnos nem egészen értem mi a probléma.
- A hozzászóláshoz be kell jelentkezni
A 343 és 352 nincsenek a helyükön, (2014-01-16-on vannak holott 2014-01-17-én kéne legyenek: 342 és 344, valamint 351 és 353 dátumai miatt). Így értem. Tehát ezeket a selejtes sorokat kéne kiemelni, amelyek nem követik a növekményt megfelelően.
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
Még mindig nem tiszta, lehet az én felfogásom nehéz de más van az adatbázisban mint amit te írsz. Jelenleg ez van:
343 2014-04-10
352 2014-04-15
Ebbél szeretnél ezt?
343 2014-04-11
352 2014-04-16
- A hozzászóláshoz be kell jelentkezni
No igen, így várhatom, hogy legyen kimenete (nincs) ennek:
select a.id, a.datum, b.id, b.datum
from ttt as a, ttt as b
where
(b.id <= a.id and b.datum > a.datum)
or (b.id >= a.id and b.datum < a.datum)
Nem állítom, hogy nem szoktam nemlétező problémákat megoldani, de ritkán importálok ilyesmihez adatokat.
- A hozzászóláshoz be kell jelentkezni
Uhh, rossz adatokkal töltöttem fel. :)
Megoldva közben. :)
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni
Akkor most már leírhatod a valódi problémát valódi adatokkal és a megoldást is! :)
- A hozzászóláshoz be kell jelentkezni
A megoldás ott van, rossz adatok pl:
1, 2014-02-03
2, 2014-02-01 <<<< Ez rossz, 2014-02-03 és 2014-02-04 kéne legyen.
3, 2014-02-04
4, 2014-02-04
5, 2014-03-01
--
Coding for fun. ;)
- A hozzászóláshoz be kell jelentkezni