我想返回表格中每个客户的所有最小日期,如果是MIN日期则显示为“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
答案 0 :(得分:0)
使用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