带内连接和 where 子句的 Max(date)
Max(date) with inner join and where clause
我有 2 tables,用户和订单。
用户 table 中的名称和组都是唯一组合,因此请注意,这里我们在条目中共有 5 个唯一组合。
对于每个独特的组合,我想找到他们各自的最新状态,只关心活跃和不活跃。
然后,我将忽略活动状态,并输出非活动状态的查询。
(但目前,我只查询所有 active/inactive 结果,因为我不想让事情变得更困难)
这是我写的两个最接近的 sql 语句(错误)
此 returns 所有唯一组合状态: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');
这仅为每个唯一组合提供 active/inactive 的第一个条目(应该是 last/latest 条目)
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 约翰德克萨斯美国
K02 尼尔俄亥俄美国
K03 sally 美国俄亥俄州
K04 西蒙俄亥俄美国
K05 詹姆斯德克萨斯美国
K06 詹姆斯德克萨斯美国
K07 美国德克萨斯州约翰
id 状态 someA someB someC 日期(时间戳)
K01 active I just randomly 21-09-2018 19:22:33 下午
K02 inactive 放一些话 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,请告诉我。
欢迎编辑我的句子,我可能没有完美的句子来描述我的问题。
如果你想要最近的订单,你可以这样做:
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';
我有 2 tables,用户和订单。
用户 table 中的名称和组都是唯一组合,因此请注意,这里我们在条目中共有 5 个唯一组合。
对于每个独特的组合,我想找到他们各自的最新状态,只关心活跃和不活跃。
然后,我将忽略活动状态,并输出非活动状态的查询。
(但目前,我只查询所有 active/inactive 结果,因为我不想让事情变得更困难)
此 returns 所有唯一组合状态: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');
这仅为每个唯一组合提供 active/inactive 的第一个条目(应该是 last/latest 条目)
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 约翰德克萨斯美国
K02 尼尔俄亥俄美国
K03 sally 美国俄亥俄州
K04 西蒙俄亥俄美国
K05 詹姆斯德克萨斯美国
K06 詹姆斯德克萨斯美国
K07 美国德克萨斯州约翰
id 状态 someA someB someC 日期(时间戳)
K01 active I just randomly 21-09-2018 19:22:33 下午
K02 inactive 放一些话 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,请告诉我。
欢迎编辑我的句子,我可能没有完美的句子来描述我的问题。
如果你想要最近的订单,你可以这样做:
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';