返回MIN(DATE)和其他现有日期

时间:2017-05-18 03:28:31

标签: mysql sql

我想返回表格中每个客户的所有最小日期,如果是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()

enter image description here

这是我需要的结果

 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

1 个答案:

答案 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