Sql 我试图返回一个查询,该查询将给出所有用户的倒数第二个交货日期

Sql 我试图返回一个查询,该查询将给出所有用户的倒数第二个交货日期,sql,apache-spark,databricks,Sql,Apache Spark,Databricks,我正在使用databricks数据库,我必须编写一个查询,返回所有用户倒数第二个订单的交货日期(因此倒数第二个交货日期)。我有所有用户的历史交货日期,但我只对所有用户的倒数第二个交货日期感兴趣 我将试着用一个简化的例子来引导你们完成我想要完成的事情 当我为一个用户运行下面的代码时 SELECT delivery_date_local FROM order.orders WHERE lower(customer_login_visits) = '<my-email-here>@gma

我正在使用databricks数据库,我必须编写一个查询,返回所有用户倒数第二个订单的交货日期(因此倒数第二个交货日期)。我有所有用户的历史交货日期,但我只对所有用户的倒数第二个交货日期感兴趣

我将试着用一个简化的例子来引导你们完成我想要完成的事情

当我为一个用户运行下面的代码时

SELECT delivery_date_local
FROM order.orders 
WHERE lower(customer_login_visits) = '<my-email-here>@gmail.com'
我想要的是该用户(以及所有其他用户)的倒数第二个交货日期,在本例中为2019-03-22,但如果用户在同一天没有多个订单,则会有所不同

这是我正在运行的查询,以获得所需的结果

但我收到以下错误:

SQL语句中出错:ParseException:
预期输入“来自”不匹配(第5行,位置0)

我在网上读过各种帖子,并尝试过不同的查询,但似乎没有任何效果。

我想你想要:

SELECT o.*
FROM (SELECT o.*,
             DENSE_RANK() OVER (PARTITION BY customer_login_visits ORDER BY Delivery_date_local 
描述)作为seqnum 从命令 )o 其中,seqnum=2

这实际上返回倒数第二天的所有订单。如果只需要日期,请使用“选择不同的:

SELECT DISTINCT customer_login_visits, Delivery_date_local
FROM (SELECT o.*,
             DENSE_RANK() OVER (PARTITION BY customer_login_visits ORDER BY Delivery_date_local DESC) as seqnum
      FROM order.orders o
     ) o
WHERE seqnum = 2;
我想你想要:

SELECT o.*
FROM (SELECT o.*,
             DENSE_RANK() OVER (PARTITION BY customer_login_visits ORDER BY Delivery_date_local 
描述)作为seqnum 从命令 )o 其中,seqnum=2

这实际上返回倒数第二天的所有订单。如果只需要日期,请使用“选择不同的:

SELECT DISTINCT customer_login_visits, Delivery_date_local
FROM (SELECT o.*,
             DENSE_RANK() OVER (PARTITION BY customer_login_visits ORDER BY Delivery_date_local DESC) as seqnum
      FROM order.orders o
     ) o
WHERE seqnum = 2;

如果您使用的是
densite_RANK
,它会将这三个不同的日期分组为三个序列号;1, 2, 3. 如果你想得到第22名作为答案,那么试着使用
行号
,例如:

SELECT *
FROM
  (
  SELECT ROW_NUMBER() OVER( PARTITION BY customer_login_visits ORDER BY delivery_date_local DESC ) AS seqnum, 
  customer_login_visits,
  delivery_date_local
  FROM order.orders
  )
WHERE seqnum = 2

如果您使用的是
densite_RANK
,它会将这三个不同的日期分组为三个序列号;1, 2, 3. 如果你想得到第22名作为答案,那么试着使用
行号
,例如:

SELECT *
FROM
  (
  SELECT ROW_NUMBER() OVER( PARTITION BY customer_login_visits ORDER BY delivery_date_local DESC ) AS seqnum, 
  customer_login_visits,
  delivery_date_local
  FROM order.orders
  )
WHERE seqnum = 2

非常感谢@Gordon Linoff。成功了。我要做的唯一一件事就是根据wBob给出的理由,将densite_RANK()改为ROW_NUMBER。非常感谢@Gordon Linoff。成功了。根据wBob给出的理由,我唯一要做的就是将densite_RANK()更改为ROW_NUMBER。非常感谢您提出的将densite_RANK更改为ROW_RANK的建议。你是对的。你会考虑把这个标记为答案还是需要额外的建议?谢谢一百万关于改变DeNeSyRead到RooQueRead的建议。你是对的。你会考虑把这个标记为答案还是需要额外的建议?