有三列
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条目序列的用户明智之处。
答案 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
答案 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