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

标签 mysql sql

我想返回表中每个客户的所有最小日期,如果是最短日期,则显示为“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

最佳答案

使用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/

相关文章:

Mysql查询子选择得到NULL

php - 根据字段值排序数据

php - 获取phpmyadmin路径

php - 需要 php mysql 统计图表示例脚本

sql - 如何将 union all 与手动值(而不是来自另一个表)一起使用?

sql - 找出哪些记录对的位置可以在一组组合记录中安全地切换

sql - gorm 是否用逻辑 OR 解释结构体的内容?

mysql - 两个 SQL 查询 - 性能差异?

php - 根据选定的 itemid 更新 foreach 循环中的 Mysql 行

Mysql 和 Node : Running query in parallel