Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于标准的最后一个值_Sql_Sql Server - Fatal编程技术网

Sql 基于标准的最后一个值

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".

我使用以下查询从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"."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