如何获取小于或等于当前日期的最新"Effective-date"



使用Crystal Reports 2016,Progress Openedge 11.7 ODBC驱动程序用于DB连接器

我一直在与";添加命令";函数,到目前为止我创建的SQL查询使我最接近我想要的结果,但我需要弄清楚如何返回每个标价序列的第一行,按"分组;产品密钥然后是位置密钥然后是标价序列";。我试过";Row_Number(("选项,但它不存在于Progress OpenEdge DB中(不是可识别的命令(

Select "product-key", "location-key", "list-price-sequence", "effective-date", "price", "system-id"
FROM "APPRISE"."PUB"."product-price" p
WHERE  (p."location-key"='00000001' OR p."location-key"='00000008') AND 
(p."list-price-sequence" = '1' OR p."list-price-sequence" = '3') AND
p."effective-date"<= curdate() AND 
p."system-id"='Aamerica'
GROUP BY p."product-key", p."location-key", p."list-price-sequence", p."effective-date", p."price", p."system-id"
ORDER BY p."location-key" ASC, p."list-price-sequence" ASC, p."effective-date" DESC

DB中的"产品价格"表存储价格列表。我的分组依据|产品密钥|位置密钥|标价序列

然后按生效日期递减排序

我正在包含一个图像。黄色突出显示的项目是所需的当前记录。未突出显示的项目是旧价格,需要通过上面的SQL查询丢弃。

上述SQL查询命令的表结果

使用row_number,这应该适用于大多数RDBMS实现

select sku, price from (
select *, Row_Number() over (partition by sku order by EffectiveDate desc) rn
from t
where EffectiveDate < [ GetDate() / CURRDATE() / CURR_DATE() etc] depending on DB
)t
where t.rn=1

相关内容

  • 没有找到相关文章

最新更新