Используя Макс и группировать по - PullRequest
1 голос
/ 25 августа 2011

У меня следующий запрос:

SELECT a.* FROM 
(SELECT
 moncallAdd.FirstListing,
  max (Dateadd(MINUTE, moncalladd.addtime,
         DateAdd(Day,moncalladd.adddate,'12/31/1899'))) as AddStart,
 DATEADD(MINUTE, mOnCallAdd.StartOnCallTime,
         DATEADD(DAY, mOnCallAdd.StartOnCallDate, '12/31/1899')) AS OnCallStart,
 DATEADD(MINUTE, mOnCallAdd.duration,
         DATEADD(MINUTE, mOnCallAdd.StartOnCallTime,
                 DATEADD(DAY, mOnCallAdd.StartOnCallDate, '12/31/1899'))) AS OnCallEnd,
 'Added' AS Activity
 FROM
 mdr.dbo.mOnCallAdd
  WHERE DATEADD(MINUTE, mOnCallAdd.StartOnCallTime,
 DATEADD(DAY, mOnCallAdd.StartOnCallDate, '12/31/1899')) < GETDATE() 
AND 
 DATEADD(MINUTE, mOnCallAdd.duration,
         DATEADD(MINUTE, mOnCallAdd.StartOnCallTime,
                 DATEADD(DAY, mOnCallAdd.StartOnCallDate, '12/31/1899'))) >  GETDATE()
AND  mOnCallAdd.SchedName = 'capital neph') a 

LEFT JOIN 
(SELECT
 moncallDelete.FirstListing,
 DATEADD(MINUTE, mOnCallDelete.StartOnCallTime,
         DATEADD(DAY, mOnCallDelete.StartOnCallDate, '12/31/1899')) AS OnCallStart,
 DATEADD(MINUTE, mOnCallDelete.duration,
         DATEADD(MINUTE, mOnCallDelete.StartOnCallTime,
                 DATEADD(DAY, mOnCallDelete.StartOnCallDate, '12/31/1899'))) AS OnCallEnd,
'Deleted' AS Activity
FROM
   mdr.dbo.mOnCallDelete
  WHERE DATEADD(MINUTE, mOnCallDelete.StartOnCallTime,
 DATEADD(DAY, mOnCallDelete.StartOnCallDate, '12/31/1899')) < GETDATE() 
AND 
 DATEADD(MINUTE, mOnCallDelete.duration,
         DATEADD(MINUTE, mOnCallDelete.StartOnCallTime,
                 DATEADD(DAY, mOnCallDelete.StartOnCallDate, '12/31/1899'))) >  GETDATE()
AND  mOnCallDelete.SchedName = 'capital neph') b 
ON a.FirstListing = b.FirstListing
and a.oncallstart = b.oncallstart
and a.oncallend = b.oncallend
group by FirstListing

и когда я пытаюсь выполнить этот запрос, я получаю следующую ошибку:

Неоднозначное имя столбца 'FirstListing'.

и когда я пытаюсь group by moncalladd.firstlisting, я получаю эту ошибку:

Префикс столбца 'moncalladd' не совпадает с именем таблицы или псевдонимом, используемым в запросе.

и когда я пытаюсь group by a.firstlisting, я получаю эту ошибку:

Столбец 'a.AddStart' недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.

Я не знаю, чего мне не хватает, но, очевидно, это что-то простое. Может кто-нибудь помочь мне с этим?

Ответы [ 2 ]

1 голос
/ 25 августа 2011

В тот момент, когда вы используете предложение GROUP BY, вы должны указать для каждого столбца в списке SELECT, хотите ли вы объединить оператор группы (например, SUM, * 1006). *) применяется к нему, или является ли он частью группы ключ - это последнее делается путем включения его в список GROUP BY.

Поскольку вы SELECT используете все 5 столбцов своего подзапроса a, вы должны сказать, что должно произойти с каждым из них, когда выполняется операция группировки.

Для меня не сразу очевидно, что ваш запрос верен, поэтому я не могу сказать, что решение, но это может быть просто метром явного перечисления всех столбцов a в GROUP BY пункт.

0 голосов
/ 25 августа 2011
  1. Измените вашу производную таблицу a, чтобы она имела собственный GROUP BY. У вас есть MAX(), что заставляет вас включить GROUP BY. Смотри строки 4 через 16 на моем Pastie.

2. Измените параметры SELECT и GROUP BY в первой и последней строках вашего запроса:

SELECT a.FirstListing, a.AddStart, a.OnCallStart, a.OnCallEnd, a.Activity
FROM ---your big derived table
GROUP BY  a.FirstListing, a.AddStart, a.OnCallStart, a.OnCallEnd, a.Activity

Вот как должен выглядеть ваш код: http://pastie.org/2428802

...