首页 > 解决方案 > 如何在我的查询中添加一个显示少于当前日期的数据的新列?

问题描述

我在下面看到的当前查询显示了用户详细信息和他们已注册的活动,但是在他们参加了一个活动后,我想要另一列显示 WHERE Start_Date < CURDATE() 以便在他们已注册的当前活动之间进行拆分和他们已经参加过的活动。有什么想法可以将其添加到以下查询中吗?

SELECT users.username, users.user_firstname, users.user_lastname, users.user_role,
       GROUP_CONCAT( Events.Event_Name ) AS Event_Names, COUNT(Events.Event_Name) AS Event_Count
FROM users LEFT JOIN 
     user_events
     ON users.id = user_events.id LEFT JOIN
     Events
     ON Events.Event_ID = user_events.Event_ID
GROUP BY users.username, users.user_firstname, users.user_lastname, users.user_role

理想情况下:

| username| user_firstname | user_lastname | user_role | Event_Name |PreEve                               
| M       | jo             | mccann        | employee  | baking,run | fight

标签: mysqlsql

解决方案


这是你想要的吗?

SELECT u.username, u.user_firstname, u.user_lastname, u.user_role,
       GROUP_CONCAT(CASE WHEN e.Start_Date < CURDATE() THEN e.Event_Name END) AS Previous_Event_Names, 
       GROUP_CONCAT(CASE WHEN e.Start_Date >= CURDATE() THEN e.Event_Name END) AS Future_Event_Names, 
       COUNT(e.Event_Name) AS Event_Count
FROM users u LEFT JOIN 
     user_events ue
     ON u.id = ue.id LEFT JOIN
     Events e
     ON e.Event_ID = ue.Event_ID
GROUP BY u.username, u.user_firstname, u.user_lastname, u.user_role;

GROUP_CONCAT()忽略NULL值。


推荐阅读