Ik probeer (het liefst dmv één of een serie queries) een speciale grouping te realiseren. Misschien is het heel simpel en zie ik door het staren niet meer hoe simpel het is, misschien vraag ik het onmogelijke.
Het beste uit te leggen door een voorbeeld. Stel je hebt een tabel zoals deze (voorbeeld matchet de werkelijkheid totaal niet, maar het gaat even om het idee):
Nu wil ik uit zo'n tabel bv per product een historisch overzicht van de verkopers (sales) die het product verkocht hebben. E.g. voor product 1: het werd eerst verkocht door 1, daarna door 2, toen 3 en daarna weer 1. De relevante gegevens die je daarover zou kunnen weergeven zou dit zijn:
Dus wanneer begon de verkoop door die sales en wanneer eindigde die voor het weer door een ander verkocht werd. Met andere woorden, ik zoek een group by die rekening houdt met de volgorde van de rows, en dus gaat groeperen zodra er een nieuwe waarde voorkomt. Kan dit eigenlijk wel zoals ik het wil, of kan ik beter handmatig een table scan gaan doen? dat doe ik liever niet, het gaat uiteindelijk om >30M rows.
Ik zat zelf te denken in de richting van een temp table met key constraint en daar een INSERT IGNORE of ON DUPLICATE KEY naar te schrijven (kun je mooi de MAX(time) mee vullen). Ik wil het overzicht maar eenmalig genereren dus het mag wel even duren.
Het beste uit te leggen door een voorbeeld. Stel je hebt een tabel zoals deze (voorbeeld matchet de werkelijkheid totaal niet, maar het gaat even om het idee):
+------------+----------+---------------------+ | product_id | sales_id | time | +------------+----------+---------------------+ | 1 | 1 | 2011-05-22 16:12:18 | | 1 | 1 | 2011-05-23 16:12:27 | | 1 | 2 | 2011-05-24 16:12:46 | | 2 | 1 | 2011-05-24 16:14:35 | | 1 | 3 | 2011-05-25 16:12:59 | | 2 | 2 | 2011-05-25 16:14:39 | | 1 | 1 | 2011-05-26 16:13:12 | | 2 | 2 | 2011-05-26 16:14:42 | | 2 | 2 | 2011-05-27 16:14:44 | | 2 | 1 | 2011-05-28 16:14:46 | +------------+----------+---------------------+
Nu wil ik uit zo'n tabel bv per product een historisch overzicht van de verkopers (sales) die het product verkocht hebben. E.g. voor product 1: het werd eerst verkocht door 1, daarna door 2, toen 3 en daarna weer 1. De relevante gegevens die je daarover zou kunnen weergeven zou dit zijn:
+------------+----------+---------------------+---------------------+ | product_id | sales_id | MAX(time) | MIN(time) | +------------+----------+---------------------+---------------------+ | 1 | 1 | 2011-05-23 16:12:27 | 2011-05-22 16:12:18 | | 1 | 2 | 2011-05-24 16:12:46 | 2011-05-24 16:12:46 | | 1 | 3 | 2011-05-25 16:12:59 | 2011-05-25 16:12:59 | | 1 | 1 | 2011-05-26 16:13:12 | 2011-05-26 16:13:12 | +------------+----------+---------------------+---------------------+
Dus wanneer begon de verkoop door die sales en wanneer eindigde die voor het weer door een ander verkocht werd. Met andere woorden, ik zoek een group by die rekening houdt met de volgorde van de rows, en dus gaat groeperen zodra er een nieuwe waarde voorkomt. Kan dit eigenlijk wel zoals ik het wil, of kan ik beter handmatig een table scan gaan doen? dat doe ik liever niet, het gaat uiteindelijk om >30M rows.
Ik zat zelf te denken in de richting van een temp table met key constraint en daar een INSERT IGNORE of ON DUPLICATE KEY naar te schrijven (kun je mooi de MAX(time) mee vullen). Ik wil het overzicht maar eenmalig genereren dus het mag wel even duren.