这是一个难以解释的问题,让我们看看我是否可以。
我正在寻找一种方法在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
答案 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