【问题标题】:Is there any query to only return 1 row for each product是否有任何查询只为每个产品返回 1 行
【发布时间】:2021-12-21 06:23:50
【问题描述】:

我想对我的数据进行查询,并且只想为日期较大的每个产品名称返回 1 行。

数据:

╔═══════════╦═════════════╦═══════╦═══════╗
║ ProductID ║ ProductName ║ Total ║ date  ║
╠═══════════╬═════════════╬═══════╬═══════╣
║      1001 ║ abc         ║    12 ║  2    ║
║      1002 ║ abc         ║    23 ║  4    ║
║      2002 ║ xyz         ║     8 ║  5    ║
║      3004 ║ ytp         ║    15 ║  1    ║
║      4001 ║ aze         ║    19 ║  1    ║
╚═══════════╩═════════════╩═══════╩═══════╝

我的意思是我想看到这个结果:

╔═══════════╦═════════════╦═══════╦═══════╗
║ ProductID ║ ProductName ║ Total ║ date  ║
╠═══════════╬═════════════╬═══════╬═══════╣
║      1002 ║ abc         ║    23 ║  4    ║
║      2002 ║ xyz         ║     8 ║  5    ║
║      3004 ║ ytp         ║    15 ║  1    ║
║      4001 ║ aze         ║    19 ║  1    ║
╚═══════════╩═════════════╩═══════╩═══════╝

【问题讨论】:

  • 我明白你的意思,但我只想提一下,2 不是日期。
  • @jarlh 谢谢我知道它只是为了提问
  • 这是answer 你的问题吗?
  • @AntonGrig 是的,谢谢

标签: sql database postgresql


【解决方案1】:

试试这个:

SELECT DISTINCT ON (ProductName)
       ProductID, ProductName, Total, date
  FROM your_table
 ORDER BY ProductName, date DESC

【讨论】:

  • OP 想要不同的产品名称
  • 可以自己解决。
  • @Salman A:同意你的看法。感谢您的更新。
【解决方案2】:
SELECT *FROM
(
  SELECT X.ProductID,X.ProductName,X.Total,X.DATE,
    ROW_NUMBER()OVER(PARTITION BY X.PRODUCTNAME ORDER BY X.DATE DESC)XCOL
  FROM YOUR_TABLE AS X
)A WHERE A.XCOL=1

【讨论】:

  • 这或多或少是distinct on的定义。
【解决方案3】:

试试这个:

   SELECT a.ProductID, a.ProductName, a.Total, a.date
    FROM Product a
    INNER JOIN (
        SELECT ProductName, MAX(date) date
        FROM Product
        GROUP BY ProductName
    ) b ON a.ProductName = b.ProductName AND a.date = b.date
    order by a.ProductID

http://sqlfiddle.com/#!17/7ffd5/1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 2020-05-08
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多