-Поиск по дневнику

Поиск сообщений в rss_sql_ru_access_programming

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 16.03.2006
Записей:
Комментариев:
Написано: 4


PIVOT, сортировка и выбор последнего значения

Среда, 05 Марта 2014 г. 14:53 + в цитатник
Есть таблица с тарифами их изменениями по датам. Сегодня поменялся один тариф, завтра (в следующем месяце) другой. Тарифы то увеличиваются, то уменьшаются.
Собственно сама тестовая таблица выглядит так:
ОбъектТарификации ДатаТарифа Тариф
Объект 101.01.2014100
Объект 201.01.2014100
Объект 301.01.2014100
Объект 401.01.2014100
Объект 501.01.2014100
Объект 601.02.2014200
Объект 101.02.2014200
Объект 701.02.2014200
Объект 201.03.2014300
Объект 601.03.2014300
Объект 701.03.2014300
Объект 101.04.2014150
Объект 501.04.2014150
Объект 701.04.2014150


Должна получиться таблица следующего вида (Объект, последний тариф (в дальнейшем с ограничением по дате), последняя дата изменения тарифа и для визуального контроля тарифы по датам):
ОбъектТарификацииТекущийТарифДатаПослИзмТарифа01_04_201401_03_201401_02_201401_01_2014
Объект 115001/04/2014150___200100
Объект 230001/03/2014___300___100
Объект 310001/01/2014_________100
Объект 410001/01/2014_________100
Объект 515001/04/2014150______100
Объект 630001/03/2014___300200___
Объект 715001/04/2014150300200___


Но после запроса с PIVOT получается какая-то ерунда:
ОбъектТарификацииТекущийТарифДатаПослИзмТарифа01_04_201401_03_201401_02_201401_01_2014
Объект 120001/04/2014150200100
Объект 230001/03/2014300100
Объект 310001/01/2014100
Объект 410001/01/2014100
Объект 515001/04/2014150100
Объект 630001/03/2014300200
Объект 730001/04/2014150300200


TRANSFORM Last(Т.[Тариф]) AS [Last-Тариф]
SELECT
       Т.[ОбъектТарификации],
       Last(Т.[Тариф]) AS [Текущий Тариф],
       First(Т.[ДатаТарифа]) AS ДатаПослИзмТариф
FROM (
       SELECT Тарифы.[ОбъектТарификации],
              Тарифы.[Тариф],
              Тарифы.[ДатаТарифа]
       FROM Тарифы
       ORDER BY Тарифы.[ОбъектТарификации], Тарифы.[ДатаТарифа] DESC
         )  AS Т
GROUP BY Т.[ОбъектТарификации]
ORDER BY Т.[ОбъектТарификации], Т.[ДатаТарифа] DESC 
PIVOT Т.[ДатаТарифа];


Пробовал и Last и First - результат всё одно какой-то левый получается. Должен выдавать первое, либо последнее значение, а выдаёт когда как. То среднее - по таблице видно. Даже внутренний запрос с сортировкой сделал. Сам запрос формируется нормально, а при вставке внутрь запроса с PIVOT - опять такая-же чехарда. (Last-First в перврй части Select-а выставлял и одинаковые и разные - Дата вроде выбирается правильно, но тоже под вопросом - может случайно). Непонятно при аггрегированных функциях First и Last появление средних значений, которые и не First и не Last.
Может где что не так разворачиваю?
Подскажите, гуру, где копать.
Индекса по Объекту тарификации и дате не делал. Сортировку, как и группировку указываю явно. Да и запрос этот тестовый, реальный будет отличаться.
Пока делаю на MSAccess в дальнейшем запрос будет крутиться на MSSQL2005, а приложение так-же на Access.

http://www.sql.ru/forum/1080949/pivot-sortirovka-i-vybor-poslednego-znacheniya


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку