我可以合并来自分组的最新行和最旧行的数据吗?

问题描述 投票:0回答:1

我想以某种方式合并这些MySQL 5.6结果。这个想法是从每个id的最新和最旧的行中获取数据。配对时间/ id值是唯一的。

表是:

| time                | id | titulo   | precio | vendidos |
+---------------------+----+----------+--------+----------+
| 2019-10-26 19:12:14 | 1  | apple_a  | 2      | 10       |
| 2019-10-26 19:12:14 | 2  | pea      | 3      | 7        |
| 2019-10-26 19:12:14 | 3  | orange_a | 1      | 4        |
| 2019-10-28 19:12:14 | 3  | orange_a | 2      | 12       |
| 2019-10-28 19:12:14 | 4  | banana   | 5      | 7        |
| 2019-10-28 19:12:14 | 5  | peach    | 9      | 1        |
| 2019-10-29 19:12:14 | 1  | apple_b  | 2      | 12       |
| 2019-10-29 19:12:14 | 2  | pea      | 3      | 9        |
| 2019-10-29 19:12:14 | 3  | orange_b | 2      | 19       |
| 2019-10-29 19:12:14 | 4  | banana   | 6      | 14       |
| 2019-10-30 19:12:14 | 1  | apple_b  | 3      | 17       |
| 2019-10-30 19:12:14 | 2  | pea      | 3      | 11       |

带代码:

-- Get latest rows for each id:
SELECT b.*
FROM (SELECT t.id, MAX(time) AS latest
    FROM srapedpubs t GROUP BY id) a
INNER JOIN srapedpubs b ON b.id = a.id AND b.time = a.latest
ORDER BY id ASC
;

-- Get oldest rows for each id:
SELECT b.*
FROM (SELECT t.id, MIN(time) AS oldest
    FROM srapedpubs t GROUP BY id) a
INNER JOIN srapedpubs b ON b.id = a.id AND b.time = a.oldest
ORDER BY id ASC
;

结果是:

|                time | id |   titulo | precio | vendidos |
|---------------------|----|----------|--------|----------|
| 2019-10-30 19:12:14 |  1 |  apple_b |      3 |       17 |
| 2019-10-30 19:12:14 |  2 |      pea |      3 |       11 |
| 2019-10-29 19:12:14 |  3 | orange_b |      2 |       19 |
| 2019-10-29 19:12:14 |  4 |   banana |      6 |       14 |
| 2019-10-28 19:12:14 |  5 |    peach |      9 |        1 |

|                time | id |   titulo | precio | vendidos |
|---------------------|----|----------|--------|----------|
| 2019-10-26 19:12:14 |  1 |  apple_a |      2 |       10 |
| 2019-10-26 19:12:14 |  2 |      pea |      3 |        7 |
| 2019-10-26 19:12:14 |  3 | orange_a |      1 |        4 |
| 2019-10-28 19:12:14 |  4 |   banana |      5 |        7 |
| 2019-10-28 19:12:14 |  5 |    peach |      9 |        1 |

SQL Fiddle:

http://sqlfiddle.com/#!9/a9fafc/1

如何合并两个选择以从最旧和最新的行中获取数据?最好忽略最旧和最新的相同行(例如ID 5,“桃子”)]

所需的输出:

|                time | id |   titulo | precio | vendidos |         oldest_time | oldest_precio | oldest_vendidos |
|---------------------|----|----------|--------|----------|---------------------|---------------|-----------------|
| 2019-10-30 19:12:14 |  1 |  apple_b |      3 |       17 | 2019-10-26 19:12:14 |             2 |              10 |
| 2019-10-30 19:12:14 |  2 |      pea |      3 |       11 | 2019-10-26 19:12:14 |             3 |               7 |
| 2019-10-29 19:12:14 |  3 | orange_b |      2 |       19 | 2019-10-26 19:12:14 |             1 |               4 |
| 2019-10-29 19:12:14 |  4 |   banana |      6 |       14 | 2019-10-28 19:12:14 |             5 |               7 |

我不知道该怎么做。我尝试了一些以不正确的结果结束的事情。那这里的人知道怎么做吗?

mysql time merge group-by greatest-n-per-group
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.