У меня возникли проблемы с написанием краткого кода, чтобы эффективно генерировать желаемый результат (в нескольких миллионах записей DB).MySQL GROUP BY с сортировкой
- деталь будет сгруппирована по
time
- элементов будет выбран путем
provider
того, что В имеет приоритет над A (и С над В) - значения должно соответствовать значению выбранного поставщика
Таблица против желаемого результата:
// given this table
id | provider | time | value
---+----------+------------+-----------
1 | A | 2013-07-01 | 0.1
2 | A | 2013-07-02 | 0.2
3 | B | 2013-07-02 | 0.3
4 | A | 2013-07-03 | 0.4
// extrapolate this result
---+----------+------------+-----------
1 | A | 2013-07-01 | 0.1
3 | B | 2013-07-02 | 0.3
4 | A | 2013-07-03 | 0.4
Запросы генерировать таблицу и данные:
data_teste CREATE TABLE `data_teste` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`provider` varchar(12) NOT NULL,`time` date NOT NULL,`value` double NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `index` (`provider`,`time`),KEY `provider` (`provider`),KEY `time` (`time`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO data_teste(`provider`, `time`, `value`) VALUES('A', '2013-07-01', 0.1),('A', '2013-07-02', 0.2),('B', '2013-07-02', 0.3),('A', '2013-07-03', 0.4);
Это классическая проблема group_by/сортировать оконном.
спасибо.
Я думаю, вы должны объяснить, почему это желаемый результат. –
@EvanMulawski есть разные провайдеры, чем приносить данные по временному ряду, но когда есть перекрытие в поле времени, я хочу, чтобы данные от провайдера B имели приоритет над A (и etecetera) – Frankie