سؤال

لدي موقف مثل هذا:

الجدول: funtable

ItemKey     ItemName     ItemPriceEffectiveDate    ItemPrice
11          ItemA        6/6/2009                  $500
12          ItemA        6/15/2009                 $550
13          ItemA        9/9/2009                  $450
14          ItemB        3/9/2009                  $150
15          ItemB        9/9/2009                  $350

أحتاج إلى القيام بما يلي:

Select
  ItemName as ItemDescription,
  (SELECT THE PRICE WITH THE LATEST EFFECTIVE DATE FROM TODAY THROUGH THE PAST)
FROM
  FunTable
GROUP BY
  ItemName

يجب أن يكون الإخراج هذا:

ItemA $550
ItemB $150

لذلك ، يمكن أن تتراوح التواريخ الفعالة للأسعار من 5 سنوات إلى 5 سنوات من الآن. أرغب في اختيار السعر الفعال إما اليوم أو في الماضي (ليس في المستقبل! إنه غير فعال بعد). يجب أن يكون السعر الفعال "الأحدث".

أي أفكار؟

هل كانت مفيدة؟

المحلول

شيء من هذا القبيل (ليس لديك أسماءك ، لكنك تحصل على الفكرة) ...

WITH A (Row, Price) AS
(
  SELECT Row_Number() OVER (PARTITION BY Item ORDER BY Effective DESC) AS [RN],
         Price FROM Table2
  WHERE Effective <= GETDATE()
)
SELECT * FROM A WHERE A.Row = 1

نصائح أخرى

select ft.ItemName,
       price
from   (select   ItemName,
                 Max(ItemPriceEffectiveDate) as MaxEff
        from     FunTable
        where    ItemPriceEffectiveDate <= GETDATE()
        group by ItemName) as d,
       FunTable as ft
where  d.MaxEff = ft.ItemPriceEffectiveDate; 

Edit: Changed the query to actually work, assuming the price does not change more than once a day.

I don't know the answer off the top of my head, but my guess is that you mean need to use a sub-query, which could make it a very expensive query.

It may be easier to pull all the data in an use code to post-process it yourself.

should work if you do

SELECT ItemName, MAX(ItemPriceEffectiveDate)
FROM FunTable
WHERE ItemPriceEffectiveDate < getDate()
GROUP BY ItemName
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top