在Sybase SQL中,要选择最近的记录并与上一条记录中的值对齐,可以使用ROW_NUMBER()
窗口函数结合子查询或公用表表达式(CTE)
-- 假设我们有一个名为orders的表,其中包含order_id, customer_id, order_date等字段
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
order_date DATE
);
-- 插入一些示例数据
INSERT INTO orders (order_id, customer_id, order_date)
VALUES (1, 101, '2021-01-01'),
(2, 101, '2021-02-01'),
(3, 102, '2021-01-15'),
(4, 102, '2021-02-15'),
(5, 103, '2021-01-10');
现在,我们将使用CTE和窗口函数来选择最近的记录,并与上一条记录中的值对齐:
WITH ranked_orders AS (
SELECT order_id, customer_id, order_date,
ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) AS rn
FROM orders
)
SELECT ro1.customer_id, ro1.order_date AS current_order_date, ro2.order_date AS previous_order_date
FROM ranked_orders ro1
LEFT JOIN ranked_orders ro2 ON ro1.customer_id = ro2.customer_id AND ro1.rn = ro2.rn + 1
WHERE ro1.rn = 1
ORDER BY ro1.customer_id;
这个查询首先使用ROW_NUMBER()
窗口函数为每个客户的订单分配一个降序排列的序号。然后,我们使用自连接将当前记录(最近的记录)与前一条记录连接起来。最后,我们只选择每个客户的最近记录(ro1.rn = 1
)。
这个查询的结果将如下所示:
customer_id | current_order_date | previous_order_date
-------------|-------------------|-------------------
101 | 2021-02-01 | 2021-01-01
102 | 2021-02-15 | 2021-01-15
103 | 2021-01-10 | NULL
这样,我们就成功地选择了最近的记录,并与上一条记录中的值对齐。
领取专属 10元无门槛券
手把手带您无忧上云