sql 分组取组内第一个和最后一个
时间: 2023-12-10 08:41:45 浏览: 264
可以使用子查询和聚合函数来实现分组取组内第一个和最后一个。
例如,假设有一个名为 `orders` 的表,其中包含以下列:`order_id`、`customer_id`、`order_date`、`total_amount`。我们要按照 `customer_id` 进行分组,并且对于每个分组,取出该分组内的第一个订单和最后一个订单。可以使用以下 SQL 语句:
```
SELECT
customer_id,
MIN(order_date) AS first_order_date,
MAX(order_date) AS last_order_date
FROM
orders
GROUP BY
customer_id;
```
上述 SQL 语句中,使用 `MIN()` 聚合函数取得每个分组内的最早订单日期,使用 `MAX()` 聚合函数取得每个分组内的最晚订单日期。然后使用 `GROUP BY` 子句将结果按照 `customer_id` 进行分组。
如果要取得每个分组内的第一个订单和最后一个订单的详细信息,可以使用以下 SQL 语句:
```
SELECT
o1.order_id AS first_order_id,
o1.customer_id AS customer_id,
o1.order_date AS first_order_date,
o2.order_id AS last_order_id,
o2.order_date AS last_order_date
FROM
orders o1
INNER JOIN (
SELECT
customer_id,
MIN(order_date) AS first_order_date,
MAX(order_date) AS last_order_date
FROM
orders
GROUP BY
customer_id
) o ON o1.customer_id = o.customer_id AND o1.order_date = o.first_order_date
INNER JOIN orders o2 ON o2.customer_id = o.customer_id AND o2.order_date = o.last_order_date;
```
上述 SQL 语句中,先使用子查询和聚合函数取得每个分组内的第一个订单和最后一个订单的日期。然后使用两个 INNER JOIN 子句将结果连接回到 `orders` 表中,以获取每个订单的详细信息。最终的结果包括每个分组内的第一个订单和最后一个订单的订单 ID、顾客 ID、订单日期等信息。
阅读全文