好的,这个真的很棘手:D
我有一张这张桌子
bills_products:
- bill_id - product_id - action -
| 1 | 4 | add |
| 1 | 5 | add |
| 2 | 4 | remove |
| 2 | 1 | add |
| 3 | 4 | add |
你可以看到id为4的产品已在账单1中添加,然后在账单2中删除,并在账单3中再次添加
所有帐单都属于bill_group。但为简单起见,我们假设所有账单都属于同一组。
现在我需要一个SQL查询,显示当前在该组中添加的所有产品。
在这个例子中,它将是5,1和4.如果我们删除ID为3且5和1的账单
我尝试用DISTINCT做到这一点,但它不够强大,或者我做错了。
答案 0 :(得分:3)
这似乎至少在SQL Server中起作用:
select product_id
from (
select product_id,
sum((case when action='add' then 1 else -1 end)) as number
from bills_products
group by product_id
) as counts
where number > 0
答案 1 :(得分:0)
SELECT DISTINCT product_id FROM bills_products WHERE action = 'add';
答案 2 :(得分:0)
GSto几乎拥有它,但您必须ORDER BY bill_id DESC
以确保您获得最新记录。
SELECT DISTINCT product_id FROM bills_products
WHERE action = 'add'
ORDER BY bill_id DESC;
(PS我想大多数人会说最好的做法是在这样的表格上设置一个时间戳列,你需要知道“最新”行是什么。你不能总是只依赖于ID 。)