MySQL-仅显示产品的最新状态

时间:2018-08-19 14:41:23

标签: mysql sql

这里放屁了……我正在提取适当的数据,但是我的专栏之一并没有收集到最准确的最新信息。

我将两个表放在一起以从'client_educational'和'client_personal'获取信息。这里的目标是获取所有六个月前参加某门课程的所有人员的列表,并显示其最新状态:已付费,exp-cert(已过期证书),pd-cert(已付费和已认证),无效等等

client_no    name    email           phone      recent_order_date    status

500000       Joe     joe@mail.com    555-5555   2017-01-02           Paid
500001       Mary    mary@mail.com   555-5555   2017-02-02           exp-cert
500002       Jane    jane@mail.com   555-5555   2017-04-02           pd-cert
500003       Jack    jack@mail.com   555-5555   2017-05-02           void
500004       John    john@mail.com   555-5555   2018-01-02           pd-cert

我的查询:

SELECT 
client_personal.client_no,client_personal.name,client_personal.email,client_personal.phone, max(order_date) as recent_order_date, client_educational.status
FROM client_personal
join client_educational client_educational on client_personal.client_no = client_educational.client_no
WHERE product IN ('Product1', 'Product2', 'Product3', 'Product4', 'Product5', 'Product6') 
group by client_no
having recent_order_date < DATE_SUB(CURDATE(),INTERVAL 6 Month);

我的输出很好,但是没有显示最新的“状态”。目标只是上面列出的产品的最新“状态”。上面的产品是一种产品,只是其系统中的名称有所不同。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:1)

如果我的理解正确,那么您想要这些课程中最新课程超过6个月的人,然后您想要他们最近的总体状况。

您可以使用MySQL group_concat() / substring_index()骇客来做到这一点:

select cp.client_no, cp.name, cp.email, cp.phone, 
       max(case when ce.product in ('Product1', 'Product2', 'Product3', 'Product4', 'Product5', 'Product6') then recent_order_date end) as max_date,
       substring_index(group_concat(ce.status order by date desc), ',', 1) as most_recent_status
from client_personal cp join
     client_educational ce
     on cp.client_no = ce.client_no
group by client_no
having max_date < DATE_SUB(CURDATE(), INTERVAL 6 Month);