首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Sybase SQL -选择最近的记录,并与上一条记录中的值对齐

在Sybase SQL中,要选择最近的记录并与上一条记录中的值对齐,可以使用ROW_NUMBER()窗口函数结合子查询或公用表表达式(CTE)

代码语言:javascript
复制
-- 假设我们有一个名为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和窗口函数来选择最近的记录,并与上一条记录中的值对齐:

代码语言:javascript
复制
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)。

这个查询的结果将如下所示:

代码语言:javascript
复制
 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

这样,我们就成功地选择了最近的记录,并与上一条记录中的值对齐。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

5分33秒

JSP 在线学习系统myeclipse开发mysql数据库web结构java编程

领券