这里放屁了……我正在提取适当的数据,但是我的专栏之一并没有收集到最准确的最新信息。
我将两个表放在一起以从'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);
我的输出很好,但是没有显示最新的“状态”。目标只是上面列出的产品的最新“状态”。上面的产品是一种产品,只是其系统中的名称有所不同。
有没有办法做到这一点?
答案 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);