我有2个表,用户和订单。
用户表中的名称和组都形成唯一的组合,因此请注意,在此条目中共有5个唯一的组合。
对于每个独特的组合,我想找到它们各自的最新状态,只关心活动和不活动。
然后,我将忽略活动状态,并输出具有非活动状态的查询。
(但目前,我只查询所有活动/非活动结果,因为我不想让事情变得更困难)
这是我写的两个最接近的sql语句(错误)
这将返回状态为active / inactive
SELECT order.id, order.status, order.someA, order.someB, order.someC, order.date, user.name, user.group, user.site FROM order INNER JOIN user ON user.id = order.id WHERE (status = 'P' OR status = 'F');
对于每个唯一组合,这仅给出活动/无效的第一个条目(应该是最后/最新条目)
SELECT MAX(order.date), order.date, order.id, order.status, order.someA, order.someB, order.someC, user.name, user.group, user.site FROM order INNER JOIN user ON user.id = order.id WHERE site = 'US' AND (status = 'P' OR status = 'F') GROUP BY name, group ORDER BY date;
id名称组网站
K01 John Texas US
K02 Niall美国俄亥俄州
K03莎莉俄亥俄州美国
K04西蒙·俄亥俄州美国
K05 James Texas US
K06詹姆斯·德州(James Texas)美国
K07约翰·德州(美国)
id状态someA someB someC日期(时间戳)
K01活动我只是随机21-09-2018 19:22:33 PM
K02不活动输入了一些内容22-09-2018 16:22:33 PM
K03在这里有效对此活动22-09-2018 19:22:33 PM
K04未知的虚拟示例输出22-09-2018 19:22:33 PM
K05不活动X S V 23-09-2018 19:22:33 PM
K06未知的希望我能解释一下23-09-2018 19:22:33 PM
K07很好地知道了我的问题24-09-2018 19:22:33 PM
以上数据是制表符分隔的,请告知是否无法导入excel。
欢迎编辑我的句子,我可能没有完美的句子来描述我的问题。
答案 0 :(得分:0)
如果您要最近的订单,可以执行以下操作:
select . . . -- unclear what columns you really want
from users u join
orders o
on u.id = o.id
where (u.name, u.group, o.date) in
(select u2.name, u2.group, max(o2.date)
from users u2 join
orders o2
on u2.id = o2.id
group by u2.name, u2.group
) and
o.status <> 'active';