Autor | Zpráva | ||
---|---|---|---|
davchy Profil |
#1 · Zasláno: 1. 4. 2012, 07:01:31
Zdravím,
chtěl bych poprosit o pomoc se sestavením dotazu. Dva dny se o to pokouším a nikdy nedostanu požadovaný výsledek. Sloupec `img_id` má řadu záznamů o stejné hodnotě, například 30 záznamů s hodnotou “7X6Y“, 50 záznamů s hodnotou “PUVQ “ atd. Do sloupce `log_date` se pak ukládá čas kdy konkrétní záznam vznikl. Potřebuji sestavit dotaz který vybere u stejných hodnot sloupce `img_id` staré záznamy, tedy vyloučí záznam který vznikl jako poslední. Je to jako kdybych dal seřazení podle `img_id` a u každé hodnoty vybral každý řádek kromě toho nejnovějšího. Mockrát děkuji. CREATE TABLE IF NOT EXISTS `cfp_bandwidth` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `img_id` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL, `log_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `log_t_image` int(11) DEFAULT NULL, `log_t_thumb` int(11) DEFAULT NULL, `log_t_small_thumb` int(11) DEFAULT NULL, `log_t_gallery` int(11) DEFAULT NULL, `log_bandwidth` int(11) DEFAULT NULL, `log_ref` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=835079 ; |
||
davchy Profil |
#2 · Zasláno: 1. 4. 2012, 11:20:05
Takže ještě jsem otestoval toto:
SELECT * FROM d5555_pic.cfp_bandwidth WHERE id NOT IN (SELECT MAX(id) FROM d5555_pic.cfp_bandwidth GROUP BY img_id); DELETE FROM d5555_pic.cfp_bandwidth WHERE id NOT IN (SELECT MAX(id) FROM d5555_pic.cfp_bandwidth GROUP BY img_id); Pomůže mi nějaká dobrá duše to vyřešit? |
||
Kajman Profil |
Možná to půjde nějak takto
DELETE FROM ball USING d5555_pic.cfp_bandwidth ball LEFT JOIN (SELECT Max(id) id FROM d5555_pic.cfp_bandwidth GROUP BY img_id) bmax ON ball.id = bmax.id WHERE bmax.id IS NULL Raději si to ale vyzkoušejte na testovacích datech, za správnost mazání neručím :-) |
||
davchy Profil |
#4 · Zasláno: 1. 4. 2012, 21:55:56
Děkuji, otestuji to.
|
||
Časová prodleva: 11 let
|
0