目标:我想找到DayInStock
Cummsold > Balance
的最低NR
查询如下
SELECT TOP (100) PERCENT
a.MonthNR
, a.DayNR
, a.DayInStock
, a.CummSold
, a.WarehouseID
, a.ItemID
, a.[Group]
, a.Balance
, a.CountryNumber
, a.Country
FROM dbo.VW_Critical_01_01 AS a
JOIN (SELECT MIN(DayInStock) AS DayInStock
, MIN(CummSold) AS Cummsold
, Balance
, ItemID
, [Group]
FROM dbo.VW_Critical_01_01
WHERE CummSold > Balance
GROUP BY DayInStock, CummSold, Balance, ItemID, [Group]
) AS b
ON b.DayInStock = a.DayInStock
AND b.ItemID = a.ItemID
AND b.[Group] = a.[Group]
ORDER BY a.ItemID, a.DayInStock
查询给出了我的结果:
MonthNR DayNR DayInStock CummSold ItemID Group Balance CountryNumber Country
**2 4 11 2902.492233 100049V3 1 2894 370 Sweden
2 4 11 2902.492233 100049V3 1 2894 280 Norway
2 4 11 2902.492233 100049V3 1 2894 270 Portugal
2 4 11 2902.492233 100049V3 1 2894 460 Finland
2 4 11 2902.492233 100049V3 1 2894 110 Switzerland**
2 5 12 2982.376102 100049V3 1 2894 370 Sweden
2 5 12 2982.376102 100049V3 1 2894 280 Norway
2 5 12 2982.376102 100049V3 1 2894 270 Portugal
2 5 12 2982.376102 100049V3 1 2894 460 Finland
2 5 12 2982.376102 100049V3 1 2894 110 Switzerland
我只希望看到标记为 BOLD
的值至于那些CummSold > Balance
(2902大于2894)而daynumber
是最低11而不是12
我的SQL Server知识似乎就此止步。我搜索并尝试了很多东西,也许我只是忽略了一些非常“愚蠢”的东西
任何帮助或建议都将不胜感激
答案 0 :(得分:1)
对于SQL Server 2005+,您可以尝试使用分析函数:
;WITH CTE AS
(
SELECT a.MonthNR,
a.DayNR,
a.DayInStock,
a.CummSold,
a.WarehouseID,
a.ItemID,
a.[Group],
a.Balance,
a.CountryNumber,
a.Country,
ROW_NUMBER() OVER(PARTITION BY ItemID, [Group], Country
ORDER BY DayInStock) RN
FROM dbo.VW_Critical_01_01 a
WHERE CummSold > Balance
)
SELECT *
FROM CTE
WHERE RN = 1
答案 1 :(得分:0)
这样的事情?
select DayNR
, DayInStock
, CummSold
, WarehouseID
, ItemID
, [Group]
, Balance
, CountryNumber
, Country
from(SELECT DayInStock
, DayNR
, DayInStock
, CummSold
, WarehouseID
, ItemID
, [Group]
, Balance
, CountryNumber
, Country
, min(DayInStock) over (partition by itemID,Group,Country) as minDayInStock
FROM dbo.VW_Critical_01_01
WHERE CummSold > Balance
)V
where V.DayInStock = V.minDayInStock