Sql 基于标准的最后一个值
我使用以下查询从SQL Server提取数据Sql 基于标准的最后一个值,sql,sql-server,Sql,Sql Server,我使用以下查询从SQL Server提取数据 SELECT "vendor"."vendornum" AS Number, "vendor"."vendornam" AS Name, "product"."prductnum" AS ProductNumber "product"."prductdsc" AS Description "po_lnrcpt"."um_code", "porcpt"."received_date" AS DateReceived, "po_lnrcpt".
SELECT
"vendor"."vendornum" AS Number,
"vendor"."vendornam" AS Name,
"product"."prductnum" AS ProductNumber
"product"."prductdsc" AS Description
"po_lnrcpt"."um_code",
"porcpt"."received_date" AS DateReceived,
"po_lnrcpt"."ovruntcst" AS Price,
FROM
(((("Test"."dbo"."company" "company" INNER JOIN
"Test"."dbo"."porcpt"
"porcpt" ON "company"."co_num"="porcpt"."co_num")
INNER JOIN
"Test"."dbo"."po" "po" ON "porcpt"."po_tky"="po"."po_tky")
LEFT OUTER JOIN
"Test"."dbo"."po_lnrcpt" "po_lnrcpt" ON
"porcpt"."po_rcvtky"="po_lnrcpt"."po_rcvtky")
LEFT OUTER JOIN
"Test"."dbo"."product" "product" ON
"po_lnrcpt"."prdtky"="product"."prdtky")
LEFT OUTER JOIN
"Test"."dbo"."vendor" "vendor" ON
"po"."ventky"="vendor"."ventky"
WHERE
"po_lnrcpt"."rcvqty"<>0 AND
"porcpt"."rcvstsflg"='C'
我是否可以使用MAX或其他功能显示特定供应商产品的最后价格
提前感谢这里有一个使用CTE的快速方法。这也可以与原始查询中的另一个内部联接一起使用。此外,您还可以使用行号。这与DateReceived列是确定最新日期的日期列的假设不同
with cte as(
SELECT
vendor.vendornum AS Number,
vendor.vendornam AS Name,
product.prductnum AS ProductNumber
product.prductdsc AS Description
po_lnrcpt.um_code,
porcpt.received_date AS DateReceived,
po_lnrcpt.ovruntcst AS Price,
FROM
Test.dbo.company company INNER JOIN
Test.dbo.porcpt
porcpt ON company.co_num=porcpt.co_num
INNER JOIN
Test.dbo.po po ON porcpt.po_tky=po.po_tky
LEFT OUTER JOIN
Test.dbo.po_lnrcpt po_lnrcpt ON
porcpt.po_rcvtky=po_lnrcpt.po_rcvtky
LEFT OUTER JOIN
Test.dbo.product product ON
po_lnrcpt.prdtky=product.prdtky
LEFT OUTER JOIN
Test.dbo.vendor vendor ON
po.ventky=vendor.ventky
WHERE
po_lnrcpt.rcvqty<>0 AND
porcpt.rcvstsflg='C')
select
c.Number
,c.Name
,c.ProductNumber
,c.Description
,c.um_code
,c.DateReceived
,c.Price
from cte c
inner join
(select Number, max(DateReceived) dt
from cte
group by Number) c2 on c2.dt = c.DateReceived and c2.Number = c.Number
行号版本
你说的最后一次是什么意思?最近的?最高价格?通过常规查询找到的最后一个?你问是否应该使用MAX。。。。好的,是的,如果你想要最高价格,但你没有明确地说。很抱歉,是的,下一个Select语句中最近的价格获取错误。Msg 156,15级,状态1,第27行关键字“Select”附近的语法不正确。很抱歉,再次忘记结尾括号,变老了。无需担心@Abbas
with cte as(
SELECT
vendor.vendornum AS Number,
vendor.vendornam AS Name,
product.prductnum AS ProductNumber
product.prductdsc AS Description
po_lnrcpt.um_code,
porcpt.received_date AS DateReceived,
po_lnrcpt.ovruntcst AS Price,
RN = row_number() over (partition by vendor.vendornum order by porcpt.received_date desc)
FROM
Test.dbo.company company INNER JOIN
Test.dbo.porcpt
porcpt ON company.co_num=porcpt.co_num
INNER JOIN
Test.dbo.po po ON porcpt.po_tky=po.po_tky
LEFT OUTER JOIN
Test.dbo.po_lnrcpt po_lnrcpt ON
porcpt.po_rcvtky=po_lnrcpt.po_rcvtky
LEFT OUTER JOIN
Test.dbo.product product ON
po_lnrcpt.prdtky=product.prdtky
LEFT OUTER JOIN
Test.dbo.vendor vendor ON
po.ventky=vendor.ventky
WHERE
po_lnrcpt.rcvqty<>0 AND
porcpt.rcvstsflg='C')
select
c.Number
,c.Name
,c.ProductNumber
,c.Description
,c.um_code
,c.DateReceived
,c.Price
from cte c
where RN = 1