【问题标题】:Get minimum value between two columns for each row获取每行两列之间的最小值
【发布时间】:2015-02-06 22:48:49
【问题描述】:

这是我的数据表:

| uid |   date   | visit | transactionDate |
+-----+----------+-------+-----------------+
|  1  | 6/2/2014 |   1   |     6/9/2014    |
|  1  | 6/2/2014 |   1   |     8/4/2014    |
|  2  | 6/2/2014 |   1   |     8/2/2014    |
|  2  | 6/2/2014 |   1   |     10/17/2014  |
|  2  | 6/2/2014 |   1   |     10/20/2014  |
|  3  | 6/2/2014 |   1   |     6/9/2014    |
|  3  | 6/2/2014 |   1   |     6/10/2014   |
|  3  | 6/2/2014 |   1   |     6/11/2014   | 
|  3  | 6/2/2014 |   1   |     6/12/2014   |
|  3  | 6/2/2014 |   1   |     6/14/2014   |
|  3  | 6/2/2014 |   1   |     6/15/2014   |
|  3  | 6/2/2014 |   1   |     6/17/2014   |
|  3  | 6/2/2014 |   1   |     6/18/2014   |
|  3  | 6/2/2014 |   1   |     6/23/2014   |

我正在尝试编写一个查询来提取日期和交易日期两列中的最小值。有没有办法做类似 MIN(date, transactionDate) 的事情?查询应选择如下内容:

uid 1 then minimum of date and transaction_dt
uid 2 then min date and transaction_dt

【问题讨论】:

  • 您是要为每行或所有记录找到最小值吗?
  • 也许您正在寻找 LEAST 函数?

标签: mysql sql select group-by min


【解决方案1】:

使用CASE 条件。

SELECT uid, visit, 
   CASE WHEN date < transactionDate THEN date ELSE transactionDate END AS minDate
FROM table;

【讨论】:

    【解决方案2】:

    LEAST() 函数与MIN() 函数一起使用。

    试试这个:

    SELECT a.uid, MIN(LEAST(a.date, a.transaction_dt)) tdate 
    FROM tableA a 
    GROUP BY a.uid;
    

    SELECT a.uid, MIN(a.tdate) tdate
    FROM (SELECT a.uid, MIN(a.date) tdate FROM tableA a GROUP BY a.uid
          UNION 
          SELECT a.uid, MIN(a.transaction_dt) tdate FROM tableA a GROUP BY a.uid
         ) AS a
    GROUP BY a.uid;
    

    【讨论】:

      【解决方案3】:

      如果您正在寻找每行的最小值:

      select uid,visit,least(date,transactionDate) as minDate from t;
      

      如果您正在寻找每个 uid 组的最小值:

      select uid,sum(visit) as totalVisits,min(least(date,transactionDate)) as minDate
        from t
        group by uid;
      

      【讨论】:

        【解决方案4】:
           SELECT UID ,MIN(tdate) FROM 
               (SELECT a.uid, a.date tdate FROM tableA a 
              UNION 
              SELECT a.uid, a.transaction_dt tdate FROM tableA a ) AS tABLE2 T GROUP BY T.UID
        

        【讨论】:

          猜你喜欢
          • 2018-04-14
          • 2018-11-15
          • 1970-01-01
          • 2020-09-21
          • 2011-11-27
          • 2018-04-30
          • 1970-01-01
          • 2020-04-30
          • 2014-03-25
          相关资源
          最近更新 更多