MySQL:在多个表中选择Distinct并按日期时间排序

时间:2013-04-12 23:42:21

标签: mysql distinct

这是一个难以解释的问题,让我们看看我是否可以。

我正在寻找一种方法在mysql中通过 distinct pids在三个表中选择最新的5个条目(按日期时间desc排序)。

以下是一个例子。

TABLE1
*请注意,表1中的列id需要用pid替换以匹配其他表(选择id作为pid)。

  id*   datetime
|-----|------------|
|  1  |  1/1/2000  |
|  2  |  2/1/2000  |
|  3  |  3/1/2000  | ← two
|  4  |  1/3/2000  | ← five
|  5  |  1/3/2000  | 

TABLE2

  id    pid    datetime
|-----|-----|------------|
|  1  |  1  |  1/2/2000  |
|  2  |  1  |  1/2/2000  |
|  3  |  2  |  2/2/2000  | ← three
|  4  |  3  |  1/2/2000  |
|  5  |  5  |  1/4/2000  | ← four

表3

  id    pid    datetime
|-----|-----|------------|
|  1  |  1  |  6/1/2000  | ← one
|  2  |  1  |  1/1/2000  |
|  3  |  1  |  1/1/2000  |
|  4  |  2  |  1/1/2000  |
|  5  |  3  |  1/1/2000  |

结果

  pid    datetime
|-----|------------|
|  1  |  6/1/2000  | ← one
|  3  |  3/1/2000  | ← two
|  2  |  2/2/2000  | ← three
|  5  |  1/4/2000  | ← four
|  4  |  1/3/2000  | ← five


我对mysql很新。我一直在寻找,这是迄今为止我提出的最好的,但这是完全错误的。谢谢你的帮助。

SELECT DISTINCT pid, datetime 
   from (SELECT id AS pid, datetime FROM table1
         UNION
         SELECT pid, datetime FROM table2
         UNION
         SELECT pid, datetime from table3) t
   ORDER BY datetime DESC
   LIMIT 5

1 个答案:

答案 0 :(得分:1)

您可以选择每个pid的最长日期

SELECT pid, max(`datetime`) as `datetime`
from (SELECT id AS pid, `datetime` FROM table1
      UNION
      SELECT pid, `datetime` FROM table2
      UNION
      SELECT pid, `datetime` from table3) t
group by pid
ORDER BY max(`datetime`) DESC
LIMIT 5