sql - 选择具有 MAX(Date) 的记录但没有获得不同的返回

标签 sql sql-server sql-server-2008 greatest-n-per-group

我正在加入表格,我的代码如下所示:

SELECT P.*
FROM (
  SELECT ABC.StockCode
    ,ABC.Supplier
    ,ABC.Price
    ,MAX(ABC.OrigReceiptDate) ReceiptDate
  FROM (
    SELECT GRND.StockCode
      ,GRND.Supplier
      ,OrigReceiptDate
      ,(GRND.OrigGrnValue / GRND.QtyReceived) AS Price
    FROM [SysproCompanyR].[dbo].[GrnDetails] GRND
    WHERE QtyReceived > 0
    ) ABC
  GROUP BY ABC.StockCode
    ,ABC.Supplier
    ,ABC.Price
  ) P
WHERE P.StockCode IN (
    SELECT StockCode
    FROM [SysproCompanyR].[dbo].[InvMaster]
    )
ORDER BY P.StockCode
  ,P.Price

但是结果集是:

enter image description here

我的问题是我需要获取最新购买的股票代码及其价格...但由于价格不同,我得到了重复值以帮助金发女郎>

最佳答案

试试这个:

WITH CTE
AS
(
    SELECT 
      ABC.StockCode, 
      ABC.Supplier, 
      ABC.Price,
      ABC.OrigReceiptDate AS ReceiptDate, 
      ROW_NUMBER() OVER(PARTITION BY ABC.Supplier
                        ORDER BY ABC.OrigReceiptDate DESC) AS RN 
    FROM
    (
       SELECT GRND.StockCode, GRND.Supplier,OrigReceiptDate, 
         (GRND.OrigGrnValue /GRND.QtyReceived) as Price
       FROM [SysproCompanyR].[dbo].[GrnDetails] GRND
       Where QtyReceived > 0
    ) AS ABC 
    INNER JOIN [SysproCompanyR].[dbo].[InvMaster] AS m 
            ON ABC.StockCode = m.StockCode
)
SELECT 
  StockCode, 
  Supplier, 
  Price,
  ReceiptDate
FROM CTE 
WHERE RN = 1;

这应该会为您提供每个供应商最新购买的股票代码及其价格。

关于sql - 选择具有 MAX(Date) 的记录但没有获得不同的返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17919045/

相关文章:

sql - 将日期时间值更新为相同日期但保留时间

c# - Dapper 未能将 SQL uniqueidentifier 类型读取为字符串

sql-server - SQL 将命令发送到程序时出现问题

sql - 如何在 SqLite 的一个查询中更新和选择一行?

mysql - 规范化该数据库的最佳方法是什么?

sql - 如果查询没有返回结果,则返回错误

关于 select 的 sql 问题 - 微不足道?

如果在 WHERE 子句中使用函数,sql 查询时间从 1 秒跳到 1 分钟以上

sql - 每当将项目添加到 Service Broker 队列时,如何执行存储过程?

mysql - UPDATE指定多个具有相同列名的表