0

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

我正在 mysql 中寻找一种方法,通过三个表中的不同pid选择最新的 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  | 

表2

  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
4

1 回答 1

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
于 2013-04-12T23:49:54.163 回答