Autor Zpráva
davchy
Profil
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
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);
..což se zdá že by mohlo odpovídat požadavku, jenže pokud použiji toto:
DELETE FROM d5555_pic.cfp_bandwidth WHERE id NOT IN (SELECT MAX(id) FROM d5555_pic.cfp_bandwidth GROUP BY img_id);
..tak končím na "#1093 - You can't specify target table 'cfp_bandwidth' for update in FROM clause".

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
Děkuji, otestuji to.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: