繁体   English   中英

比较上一行SQL中的值

[英]Compare value in previous row SQL

假设您在sqllite有一些像这样的表

c.execute('''CREATE TABLE customers
         (customer_id INT, name VARCHAR)''')

c.execute('''CREATE TABLE orders
         (order_id INT, quantity INT, order_date DATETIME, customer_id INT)''')

您如何比较两个不同日期之间的客户订单数量?

我已经查询到了我每天都有客户计数的地方

SELECT A.customer_id, name, SUM(quantity), strftime('%Y-%m-%d', order_date) d FROM orders " \
            "A LEFT JOIN customers B on A.customer_id = B.customer_id "\
            "GROUP BY d, A.customer_id " \
            "ORDER BY B.name LIMIT 20;

这样给我一些结果

(0, 'customer_0', 423, '2018-03-27')
(0, 'customer_0', 1054, '2018-03-28')
(1, 'customer_1', 757, '2018-03-21')
(1, 'customer_1', 314, '2018-03-22')

我需要能够将一行与上一行进行比较,并得到这样的差异-

customer_0, 631
customer_1, -443
SELECT
  C.customer_id,
  C.name,
  SUM(CASE WHEN strftime('%Y-%m-%d', O.order_date) = S.final_order_date THEN O.quantity END)
  -
  SUM(CASE WHEN strftime('%Y-%m-%d', O.order_date) = S.first_order_date THEN O.quantity END)
      AS delta_value
FROM
  customers    C
INNER JOIN
(
  SELECT
    customer_id,
    strftime('%Y-%m-%d', MIN(order_date))   first_order_date,
    strftime('%Y-%m-%d', MAX(order_date))   final_order_date
  FROM
    orders
  GROUP BY
    customer_id 
)
  S
    ON S.customer_id = C.customer_id
INNER JOIN
  orders    O
    ON O.customer_id = C.customer_id
GROUP BY
  C.customer_id,
  C.name
ORDER BY
  C.name
LIMIT
  20

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM