获取每行两列之间的最小值

sai*_*sai 3 mysql sql select group-by min

这是我的数据表:

| 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   |
Run Code Online (Sandbox Code Playgroud)

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

uid 1 then minimum of date and transaction_dt
uid 2 then min date and transaction_dt
Run Code Online (Sandbox Code Playgroud)

Sar*_*mar 6

使用CASE条件.

SELECT uid, visit, 
   CASE WHEN date < transactionDate THEN date ELSE transactionDate END AS minDate
FROM table;
Run Code Online (Sandbox Code Playgroud)


Sah*_*hah 5

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

尝试这个:

SELECT a.uid, MIN(LEAST(a.date, a.transaction_dt)) tdate 
FROM tableA a 
GROUP BY a.uid;
Run Code Online (Sandbox Code Playgroud)

或者

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;
Run Code Online (Sandbox Code Playgroud)