Эта простая проблема SQL доставляет мне очень тяжелые времена. Либо потому, что я вижу проблему неправильно, либо потому, что я не очень хорошо знаком с SQL. Или оба.
Что я пытаюсь сделать: у меня есть таблица с несколькими столбцами, и мне нужны только два из них: дата и время создания записи и идентификатор записи. Обратите внимание, что часть часов / минут / секунд важна здесь .
Однако я хочу сгруппировать свой выбор только по части ДАТА. В противном случае все группы, скорее всего, будут иметь 1 элемент.
Вот мой запрос:
SELECT MyDate as DateCr, COUNT(Id) as Occur
FROM MyTable tb WITH(NOLOCK)
GROUP BY CAST(tb.MyDate as Date)
ORDER BY DateCr ASC
Однако я получаю следующую ошибку:
Столбец "MyTable.MyDate" недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.
Если я не выполняю приведение в GROUP BY, все в порядке. Если я приведу MyDate к DATE в SELECT и сохраню CAST из GROUP BY, все снова будет хорошо. Очевидно, он хочет сохранить тот же формат DATE или DATETIME в GROUP BY, что и в SELECT.
Мой подход может быть совершенно неверным, поэтому я не обязательно хочу исправить вышеуказанный запрос, но найти правильный способ сделать это.
LE: Я получаю вышеуказанную ошибку в строке 1.
LE2: С другой стороны, мой вопрос действительно не очень ясен. Вы можете игнорировать вышеуказанный подход, если он полностью неверен. Ниже приведен пример сценария
Позвольте мне сказать вам, что мне нужно: я хочу получить (1) DateTime при создании каждой записи. Так что, если у меня есть 20 записей, я хочу получить 20 DateTimes. Затем, если у меня есть несколько записей, созданных в один и тот же день, я хочу количество этих записей. Например, допустим, я создал 3 записи в понедельник, 1 во вторник и 2 сегодня. Затем из моей таблицы мне нужны даты и время этих 6 записей + количество записей, которые были созданы в каждый день (3 на 19.03.2012, 1 на 20.03.2012 и 2 на 21.03.2012).