Sql GroupBy с еще одним полем в наборе результатов, как в предложении group by - PullRequest
0 голосов
/ 13 декабря 2011

У меня есть таблица с различными предложениями, привязанными к определенной дате. зависит от даты изменения цены. Я хочу получить самую дешевую сделку на каждую дату.

Моя проблема в том, что я использую группу как:

выберите цену, дату из группы сделок по дате, цена

чтобы отобразить предложение, мне нужно больше записей, которых нет в предложении group by. лучшим полем будет мой autoid, поэтому, если клиент выбирает предложение с определенной ценой, я могу отобразить это предложение со всеми его полями, используя второй выбор.

Надеюсь, мне будет проще ответить на мой вопрос. я пытался сделать его как можно более общим, но у меня такое ощущение, что это не было достаточно ясно описано: -)

Ответы [ 4 ]

2 голосов
/ 13 декабря 2011

Просто добавьте столбец Id в список GROUP BY

SELECT id, date, price 
FROM products 
GROUP BY id, date, price

В противном случае Sql Server не смог определить, какой идентификатор должен возвращаться для сгруппированных по цене и дате строк, например, рассмотрим две следующие строки:

1 | 10-10-2010 | 100 |
2 | 10-10-2010 | 100 |

Какое значение Id следует выбрать для строки, сгруппированной по дате и цене?

??? | 10-10-2010 | 100 |
1 голос
/ 13 декабря 2011

Если вы удалите id из Выберите предложение, у вас будет список всех различных пар: дата и цена .

Если вы добавите id к предложению Group By , так как это идентификатор, вы получите строку для каждой записи в вашей таблице, так что ваш Группировать по предложение не будет полезно.

Третий способ - использовать агрегатную функцию для id в предложении Select для полученияодно значение для каждой отдельной группы (первое, минимальное, максимальное и т. д.).

1 голос
/ 13 декабря 2011

Вам нужно указать агрегатную функцию для идентификатора или добавить ее в группу с помощью предложения, как предложено @sll. Совокупный пример:

SELECT MAX(id), date, price 
FROM products 
GROUP BY date, price
0 голосов
/ 13 декабря 2011

Привет, Группа полезна, когда вы делаете подсчет и т. Д.

SELECT [Display  Billing Provider], [Display  Insurance Category]
, SUM([TOTAL RVUs]) AS RVUs_08 
, SUM([Units]) AS Units_08
, SUM(Payments) AS Payments_08
FROM dbo.ProductivityAnal_2008
GROUP BY [Display  Billing Provider],[Display  Insurance Category]
ORDER BY [Display  Billing Provider],[Display  Insurance Category]

Спасибо, Абэ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...