Я пытаюсь сделать что-то в запросе, который я никогда раньше не делал. это, вероятно, требует переменные, но я никогда этого не делал, и я не уверен, что это так.
Я хочу получить список продаж, сгруппированных сначала аффилированным лицом, а затем месяцем.
Я могу это сделать, но вот поворот... Мне не нужен месяц, но месяц 1, месяц 2, месяц 3...
И это не Ян, фев, марш, а количество месяцев со дня первой продажи.
Возможно ли это в запросе вообще или мне нужно сделать это в моем коде.
О, mysql 5.1.something...
Конечно, просто напишите выражение в SQL, которое генерирует количество месяцев с момента первой продажи (вы имеете в виду первую продажу для этой аффилии? Если это так, вам понадобится подзапрос) И поскольку вы говорите, что хотите получить список продаж, я предполагаю, что вы действительно не хотите "Группировать по" affilaite и monthcount, вы просто хотите сортировать или заказывать по этим значениям)
Если вам нужна средняя сумма продаж или сумма продаж или какая-либо другая функция агрегирования данных о продажах, вы будете делать "Группировка по"...
И я не думаю, что вам нужно беспокоиться о сортировке по количеству месяцев, вы можете просто сортировать по разнице между каждой датой продаж и самой отдаленной датой продажи для каждого аффилированного лица. (Если вы хотите применить третье правило сортировки, после сортировки даты продажи, вам нужно быть более осторожным.)
Select * From Sales S
Order By Affiliate,
SalesDate - (Select Min(SalesDate)
From Sales
Where Affiliate = S.Affiliate)
Или, если вам действительно нужно, чтобы разница по месяцам
Select * From Sales S
Order By Affiliate,
Month(SalesDate) -
(Select Month(Min(SalesDate))
From Sales
Where Affiliate = S.Affiliate)
Это возможно в стандартном SQL, если вы используете то, что мне нравится называть "SQL-гимнастика". Это можно сделать с помощью подзапросов.
Но это выглядит невероятно уродливо, его сложно поддерживать, и это действительно не стоит. Вам намного лучше использовать один из многих языков программирования, которые переносят SQL (например, PL/SQL) или даже язык общего назначения, который может вызывать SQL (например, Python).
Результат будет на двух языках, но будет тем более понятным, чем то же, что написано только в SQL.