获取最后一个插入的零条目mysql

时间:2016-12-02 10:01:58

标签: mysql

有三列

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 user ID = 3,xx ID = 9的最新0条目序列的用户明智之处。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

如前所述,第一步是确定每个用户具有正数量的最后一个数据集。您寻求的所有后续数据集的最低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

答案 2 :(得分:0)

试试这个:

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