Вопрос SQL-запроса

0

Я пытаюсь сделать что-то в запросе, который я никогда раньше не делал. это, вероятно, требует переменные, но я никогда этого не делал, и я не уверен, что это так.

Я хочу получить список продаж, сгруппированных сначала аффилированным лицом, а затем месяцем.

Я могу это сделать, но вот поворот... Мне не нужен месяц, но месяц 1, месяц 2, месяц 3...

И это не Ян, фев, марш, а количество месяцев со дня первой продажи.

Возможно ли это в запросе вообще или мне нужно сделать это в моем коде.

О, mysql 5.1.something...

  • 0
    Можете привести пример?
Теги:

2 ответа

1

Конечно, просто напишите выражение в 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)
  • 0
    @Charles Вы забыли про GROUP BY, а также тот факт, что группировка должна быть по месяцам (требуется DateDiff ()). но да! Кажется, это все, что нужно ОП.
0

Это возможно в стандартном SQL, если вы используете то, что мне нравится называть "SQL-гимнастика". Это можно сделать с помощью подзапросов.

Но это выглядит невероятно уродливо, его сложно поддерживать, и это действительно не стоит. Вам намного лучше использовать один из многих языков программирования, которые переносят SQL (например, PL/SQL) или даже язык общего назначения, который может вызывать SQL (например, Python).

Результат будет на двух языках, но будет тем более понятным, чем то же, что написано только в SQL.

  • 0
    Однако чистый SQL часто удивительно быстр, потому что его можно оптимизировать и парализовать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню