Truecolors Ответов: 1

Как мне сделать запрос, чтобы сравнить топ-клиента за 2 квартала?


У меня есть набор данных (база данных AdventureWorks) с такими полями, как "totalDue, CustomerID, OrderDate, OrderNumber". Я должен показать топ-клиента и общую сумму, которую он потратил за любой 2-квартальный период с 3-х лет (с 01.07.2005 по 31.07.2008), доступных в данных. Нам сказали, что это может быть диапазон любого периода в 9 месяцев подряд, но как и каждый год. И, возможно, лучший способ сделать это-с помощью "Over BY Partition function".

Я перепробовал множество способов, но не получил правильного ответа.

То, что я пробовал до сих пор, не дает мне правильного ответа. Ответ должен быть таким CustomerID: 29641 И мы также должны показать общую сумму, потраченную этим клиентом, но нам не дали эту часть ответа.

Может ли кто-нибудь дать мне представление об этой проблеме, пожалуйста?

Что я уже пробовал:

select top 1 CustomerID,
Sum(TotalDue) Over (Partition By dateadd(qq, 3, OrderDate)) as TotalSpent
From Sales.SalesOrderHeader

Afzaal Ahmad Zeeshan

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

Кроме того, чтобы также получить общую потраченную сумму, просто добавьте ее в качестве запроса столбца (например, SUM(amount_spent). Но помните, что для агрегатных функций вам также нужно использовать группировку в SQL.

1 Ответов

Рейтинг:
0

CHill60

Возможно, было бы лучше, если бы вы просто напечатали то, что было сказано в вашем домашнем задании, потому что вы не очень хорошо объяснили это.

Однако первая проблема - вы используете Partition By за квартал, но вам также нужно разделить на CustomerID

Sum(TotalDue) Over (Partition By CustomerID, dateadd(qq, 3, OrderDate)) as TotalSpent
Кроме того, вы использовали top 1 но вы не упорядочили результаты, поэтому одна возвращаемая строка является довольно случайной. Вам нужно включить order by пункт например
order by Sum(TotalDue) Over (Partition By CustomerID, dateadd(qq, 3, OrderDate)) desc
ОПЕРАЦИОННАЯ
order by 2 desc
также будет работать-прочтите это как " заказ по 2-му пункту в списке выбора, самое высокое значение сначала"

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

Этого должно быть достаточно, чтобы заставить вас снова двигаться вперед