У меня есть таблица базы данных, содержащая данные проекта с одной записью для каждого проекта. Ниже некоторых выборочных данных продолжительность составляет несколько месяцев и в настоящее время ограничена макс. 240, но может, теоретически, быть бесконечным:Вернуть несколько строк на основе значения int из одной записи
id name amount start_date duration
1 Project A 9.000 2013-06-24 3
2 Project B 5.000 2013-07-13 2
3 Project C 15.000 2013-08-06 3
Теперь я хочу MySQL, чтобы вернуть сумму в месяц для каждого проекта:. Объем, деленное на продолжительность каждого месяца, начиная с месяца start_date находится в Так на основе приведенные выше данные, MySQL будет возвращать что-то, как показано ниже, упорядоченный по месяцам:
id name month amount_this_month
1 Project A 2013-06 3.000
1 Project A 2013-07 3.000
2 Project B 2013-07 2.500
1 Project A 2013-08 3.000
2 Project B 2013-08 2.500
3 Project C 2013-08 5.000
3 Project C 2013-09 5.000
3 Project C 2013-10 5.000
я увидел что-то here для SQL Server, давая предложение использовать фиктивную таблицу, заполненные числа. У кого-нибудь есть идеи о том, как это сделать, не влияя на исходную структуру базы данных?
Мне нужно сделать это в одном запросе (поэтому нет таблиц temp (mem)). Как это возможно в MySQL? Я видел некоторые решения для Oracle для итерации через (виртуальный) диапазон/последовательность, можно ли сделать что-то подобное в MySQL?
Q: Почему я хочу сделать это в одном запрос, нет таблиц temp/mem? A: Мне нужно добавить это как часть одного SQL-запроса, который будет динамически генерироваться закрытым исходным модулем в системе, в которой я сейчас экспериментирую/тестирую. – 7ochem
Это можно сделать с MySQL. Я был бы более склонен помочь, если бы вы показали мне, что вы пробовали до сих пор, и почему это не удалось. – RandomSeed
Таблица целых чисел - это самый простой способ сделать это, и это полезно для других вещей. Однако вы можете иметь подзаголовок фиксированных значений, объединенных вместе, чтобы получить диапазон чисел, и присоединить их к себе, чтобы получить большие диапазоны. Что-то вроде (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) – Kickstart