【问题标题】:Get Last First Inserted zero entry mysql获取最后一个第一个插入的零条目mysql
【发布时间】:2017-04-17 04:47:15
【问题描述】:

有三列

ID  User     Quantity   Date
1    x        0       2016-01-01
2    x        2       2016-01-02
3    x        0       2016-01-03
4    x        0       2016-01-04
5    xx       0       2016-01-01
6    xx       2       2016-01-02
7    xx       0       2016-01-03
8    xx       8       2016-01-04
9    xx       0       2016-01-06
10   xx       0       2016-01-04

现在,对于 x 用户 ID=3,xx ID=9,我如何获取最新的 0 条目序列中的第一个用户。

【问题讨论】:

  • SELECT * WHERE ID = 9 OR ID = 3 ?
  • 不。我需要基于用户名的查询...需要所有用户或单个用户及其最后插入的第一个零记录详细信息
  • 对于 x 用户,id 是 3,因为最后插入的 0 是 id 4。
  • 请清楚地概述您的问题,您所说的“最后一个”到底是什么意思?
  • 向我们显示查询。你尝试了什么?

标签: mysql


【解决方案1】:

这有点复杂,因为我们需要找到名称的最后一个非 0 条目。 (我自然会倾向于按日期排序,但你说 ID 是什么。)

   SELECT t1.name, max(t1.id) as check_id FROM table t1 WHERE quantity > 0 GROUP BY name

现在您可以获得高于给定 check_id 的每个名称的最小数字:

SELECT name, min(t2.id) FROM table t2
JOIN (SELECT t1.name, max(t1.id) as check_id FROM table t1 WHERE quantity > 0 GROUP BY name) as a ON a.name=t2.name
WHERE t2.quantity = 0 AND t2.id > a.id
GROUP BY t2.name

有一个问题。它将排除所有数量仅为 0 的人。如果发生这种情况,您需要使用以下代码进行另一个查询(仅获取 0 个值)

SELECT name, min(id) as check_id, sum(quantity) as qty_sum FROM table
GROUP BY name
HAVING qty_sum = 0

【讨论】:

  • 它有效。我在发布问题时保留您的建议。泰。
  • @Manoj 请您支持我的回答并将其标记为正确
【解决方案2】:

如前所述,第一步是识别每个用户最后一个具有正数的数据集。以下所有数据集的最低 ID 将是您所寻找的。换句话说,您需要查找所有正条目的 MAX(ID) 并对所有具有更高 ID 的条目应用 MIN(ID)。在一个查询中:

SELECT `User`, MIN(`ID`) FROM t `mainquery`
WHERE `ID` > (
  SELECT MAX(`ID`) FROM t `subquery`
  WHERE `Quantity` > 0 AND `mainquery`.`User` = `subquery`.`User`
  GROUP BY `User`
)
GROUP BY `User`

使用您示例中的数据,此查询返回:

User    MIN(`ID`)
x       3
xx      9

在这里测试:http://sqlfiddle.com/#!9/3c487/1/0

【讨论】:

    【解决方案3】:

    试试这个:

    SELECT t1.user,min(t1.id) as ID,quantity,date from tablename t1
    JOIN
    (SELECT MAX(id) as qid,user FROM tablename WHERE Quantity>0 GROUP BY user) t2
    ON t2.user=t1.user
    WHERE t1.id>t2.qid
    AND t1.Quantity=0
    GROUP BY t1.user
    

    【讨论】:

      猜你喜欢
      • 2011-06-01
      • 2010-12-28
      • 2014-10-10
      • 2014-06-29
      • 1970-01-01
      • 2023-03-16
      • 2011-04-30
      • 1970-01-01
      • 2015-05-16
      相关资源
      最近更新 更多