【问题标题】:MySQL: Get last 2 orders of users with conditionsMySQL:获取有条件的用户的最后 2 个订单
【发布时间】:2016-03-11 04:10:32
【问题描述】:

我意识到我的第一个解释有点不对劲,所以我回忆了自己的想法并重新提出了我的第一个问题。我要感谢 @Jitendra Sanghani 和 @StanislavL 提供第一个答案。

如果用户的最后一个订单是在 2016 年 3 月并且倒数第二个订单是在 2015 年 12 月(或任何其他更早的日期),是否可以在 MySQL 中获取最后 2 个用户订单?这意味着如果他们现在下订单,但他们之前的订单是 2016 年 1 月,那么他们将不会计算在内(因为我们正在查看 2015 年 12 月)。

我目前有一个示例orders 表,其中包含id, fullname,created 字段。

【问题讨论】:

  • 向我们展示您的表结构

标签: mysql sql


【解决方案1】:

您可以编写两个查询,然后对两个查询进行内连接

从 orderdate > 的订单中选择 a.* 作为内部连接(从 orderdate 的订单中选择 b.orderdate)

在你的情况下查询将是

select a.* from orders where a.orderdate >= '2016-03-01' as a 
inner join 
(select b.orderdate from orders where orderdate <= '2015-12-31') as b 
ON a. orderid = b.orderid

我认为这应该可以解决您的问题。

【讨论】:

  • 有一个错误,但我在重写后让它工作,但它没有显示我想要的值。这是我在顶部发布的。
  • 建议您添加用户 ID 列而不是全名,然后加入用户 ID 列。
【解决方案2】:
select o.id, 
       sum(when case o.created>'2016-03-01' then 1 else 0 end) as current_count,
       sum(when case o.created<='2016-03-01' then 1 else 0 end) as prev_count
from orders o
group by o.id
having current_count>0 and prev_count>0

修正

【讨论】:

  • 你的意思是不是:SELECT o.id, SUM(CASE WHEN DATE_FORMAT(o.created, '%Y-%m') = '2016-03' THEN 1 ELSE 0 END) current_count, SUM(CASE WHEN DATE_FORMAT(o.created, '%Y-%m') = '2015-12' THEN 1 ELSE 0 END) prev_count FROM sl_orders o GROUP BY o.id HAVING current_count &gt; 0 AND prev_count &gt; 0 但它似乎不能正常工作。
  • 是的。我在您提交查询之前发布,然后仅更正创建。事实上,我们得到 2 个计数 - 本月的订单计数和本月之前的订单计数。如果两者都 >0 我们得到了用户
猜你喜欢
  • 1970-01-01
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 2021-01-15
  • 2019-12-27
  • 1970-01-01
相关资源
最近更新 更多