【问题标题】:Query in SQL in a Database在数据库中使用 SQL 查询
【发布时间】:2021-04-08 19:03:56
【问题描述】:

我需要您的帮助才能用 SQL 编写数据库查询。想象一下这种情况:

有 3 列(ID、Material、Quantity)的数据库

id material quantity
1 X 30
2 X 15
3 Y 20

我想从数据库中获取材料 X 的最后数量条目。我的想法是做到以下几点:

SELECT quantity 
FROM table 
WHERE name = 'X' 
AND ID = ( SELECT max( ID ) FROM table)

不幸的是,我无法获得 15 的值。它仅在我仅搜索最后一行时才有效(在本例中为材料 Y)。

【问题讨论】:

    标签: mysql sql greatest-n-per-group


    【解决方案1】:
    ;WITH cte AS
    (
       SELECT *,
             ROW_NUMBER() OVER (PARTITION BY Material ORDER BY ID DESC) AS rn
       FROM table
    )
    SELECT material,quantity
    FROM cte
    WHERE rn = 1
    

    通过这种方式,您可以看到“X”、“Y”等的结果。

    【讨论】:

      【解决方案2】:

      您的子查询与您的主查询不相关,并且返回整个表的最大 ID。改为

      SELECT quantity 
      FROM table t 
      WHERE name = 'X' AND 
      ID = (SELECT max(ID) FROM table t1 where t1.name = t.name)
      

      【讨论】:

        【解决方案3】:

        过滤name = 'X'的表格,将结果按ID降序排列,得到LIMIT的第一行:

        SELECT quantity 
        FROM tablename 
        WHERE name = 'X' 
        ORDER BY ID DESC LIMIT 1
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-30
          • 1970-01-01
          • 2017-03-17
          相关资源
          最近更新 更多