2014-11-14 3 views
0

У меня есть база данных базы данных POS sql под рукой, с которой я изо всех сил пытаюсь работать.Отфильтрованный запас на руке в Sql Server 2008 R2

SELECT TOP 1000 [ID] 
    ,[Style/Colour/Size ID] 
    ,[Branch ID] 
    ,[Date] 
    ,[Start] 
    ,[Quantity] 
    ,[tc ho/bo delete flag] 
FROM [Counter Intelligence Office].[dbo].[Stock On Hand] 

Из этой таблицы я пытаюсь получить текущий запас по списку ручной (по [Стиль/цвет/размер ID]) в каждой ветви. Выглядит достаточно просто, но там, где я застрял, в таблице хранится историческая информация о руке, которая возвращается к началу времени для каждого элемента, используя поле даты. Таким образом, каждый [ID филиала] имеет несколько экземпляров [Количество] для каждого [Идентификатор стиля/цвета/размера] в разных [Дата]. Мне нужен скрипт, чтобы сузить запрос, чтобы вернуть только последний экземпляр [Дата] каждого [Тип/Цвет/Размер ID] по [Идентификатор филиала]

Надеюсь, я объяснил это достаточно хорошо! Любая помощь очень ценится

Спасибо, Деон

ответ

0

Может быть что-то вроде этого является то, что вы хотите?

SELECT 
    SOH.[ID], 
    SOH.[Style/Colour/Size ID], 
    SOH.[Branch ID], 
    SOH.[Date], 
    SOH.[Start], 
    SOH.[Quantity], 
    SOH.[tc ho/bo delete flag] 
FROM [Counter Intelligence Office].[dbo].[Stock On Hand] SOH 
INNER JOIN (
    SELECT 
     [Style/Colour/Size ID], 
     [Branch ID], 
     MAX([Date]) AS max_date 
    FROM [Counter Intelligence Office].[dbo].[Stock On Hand] 
    GROUP BY [Style/Colour/Size ID], [Branch ID] 
) MAX_DATES 
    ON SOH.[Branch ID] = MAX_DATES.[Branch ID] 
    AND SOH.[Style/Colour/Size ID] = MAX_DATES.[Style/Colour/Size ID] 
    AND SOH.[Date] = MAX_DATES.max_date 

подзапрос используется в внутреннее соединение возвращает самые последние строки для каждой группы [Стиль/цвет/размер ID], [Branch ID].