【问题标题】:returning partially distinct/unique rows返回部分不同/唯一的行
【发布时间】:2010-10-25 10:47:06
【问题描述】:

我需要创建一个查询,该查询按两列分组并根据条件返回一个附加列。

例如,假设我有以下列:

产品代码 |序列号 |数量 |购买日期 |客户编号

并且该表包含具有不同数量和购买日期的 ProductCode 和 SerialNumber 的重复组合。我想为 DatePurchased 返回具有最大(最近)值的行的 ProductCode、SerialNumber 和 Quantity。更复杂的是,必须对 CustomerID = 'xxx' 的所有行执行此操作。

有什么想法吗???

任何帮助表示赞赏。 干杯。

【问题讨论】:

  • 哪个数据库平台? SQL Server - MySQL - PostgreSQL - Oracle - 其他? (一些包含所有内容的科学数据库?)

标签: sql unique distinct partial group-by


【解决方案1】:

假设唯一的 DatePurchased:

SELECT a.*
FROM Table as a
JOIN (
   SELECT ProductCode, SerialNumber, MAX(DatePurchased) as MaxDate 
   FROM Table
   GROUP BY ProductCode, SerialNumber
) as b ON
   a.ProductCode = b.ProductCode
   AND a.SerialNumber = b.SerialNumber
   AND a.DatePurchased = b.MaxDate
WHERE
   a.CustomerID = 'xxx'

【讨论】:

    【解决方案2】:
    SELECT
         T1.ProductCode,
         T1.SerialNumber,
         T1.Quantity
    FROM
         Some_Table T1
    LEFT OUTER JOIN Some_Table T2 ON
         T2.ProductCode = T1.ProductCode AND
         T2.SerialNumber = T1.SerialNumber AND
         T2.CustomerID = T1.CustomerID AND
         T2.DatePurchased > T1.DatePurchased
    WHERE
         T1.CustomerID = 'xxx' AND
         T2.ProductCode IS NULL
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多