我有一个看起来像这样的表:

| thread_id | time       |
| --------- | ---------- |
| 769       | 1566880174 |
| 769       | 1566880415 |
| 769       | 1566884409 |
| 769       | 1566891158 |
| 769       | 1567215554 |
| 769       | 1567227195 |
| 769       | 1567822758 |
| 773       | 1566973984 |
| 773       | 1567216614 |
| 773       | 1567216833 |
| 773       | 1567216913 |
| 773       | 1567216992 |
| 773       | 1567298692 |
| 774       | 1566977378 |
| 774       | 1567218446 |
| 774       | 1567228282 |
| 774       | 1568241410 |
| 784       | 1567300468 |
| 785       | 1567300549 |
| 785       | 1567310667 |
| 785       | 1567310734 |
| 785       | 1567461936 |


我需要获取按thread_id分组的第n个值。如果我正在寻找每个thread_id的第二行,则输出应如下所示

| thread_id | time       |
| --------- | ---------- |
| 769       | 1566880415 |
| 773       | 1567216614 |
| 774       | 1567218446 |
| 784       | null       |
| 785       | 1567310667 |


我怎样才能达到这个结果?

最佳答案

如果您不在MySQL 8.0上,则可以这样做(如@Barmar建议):

SELECT thread_id,
       CASE WHEN COUNT(*) >=2
            THEN SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(TIME ORDER BY TIME) ,',',2),',',-1)
             ELSE NULL END AS TIME
  FROM TableA GROUP BY thread_id;

07-23 13:20