我想返回表中每个客户的所有最小日期,如果是最短日期,则显示为“FIRST”,如果不是,则返回“OTHER”
这是我的查询
SELECT TRANS_DATE, IF(TRANS_DATE= MIN(TRANS_DATE), 'FIRST', 'OTHER') AS TR_CODE
FROM `posthis`
WHERE datepost IS NOT NULL
我的查询仅返回 MIN()
这就是我需要的结果
CLIENTID TRANS_DATE TR_CODE
02-00002234 2002-02-01 FIRST
02-00002234 2002-02-02 OTHER
02-00002234 2002-02-03 OTHER
02-00002235 2003-01-03 FIRST
02-00002235 2003-01-05 OTHER
02-00002235 2003-01-06 OTHER
02-00002236 2003-01-03 FIRST
02-00002236 2003-01-04 OTHER
02-00002236 2003-01-13 OTHER
最佳答案
使用MIN()
因为分析函数对于解决您的问题确实会派上用场。但由于 MySQL 不支持这一点,我们可以使用连接来代替。在下面的查询中,我 LEFT JOIN
posthis
表到一个子查询,该子查询标识每个客户端的最早日期。应该记录在 posthis
匹配这个子查询,我们用代码 'FIRST'
来标记它,否则我们标记 'OTHER'
.
SELECT
t1.CLIENTID,
t1.TRANS_DATE,
CASE WHEN t2.CLIENTID IS NOT NULL THEN 'FIRST' ELSE 'OTHER' END AS TR_CODE
FROM posthis t1
LEFT JOIN
(
SELECT CLIENTID, MIN(TRANS_DATE) AS MIN_TRANS_DATE
FROM posthis
GROUP BY CLIENTID
) t2
ON t1.CLIENTID = t2.CLIENTID AND
t1.TRANS_DATE = t2.MIN_TRANS_DATE
关于mysql - 返回 MIN(DATE) 和其他现有日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44038103/