【问题标题】:Generating SQL Query生成 SQL 查询
【发布时间】:2018-11-28 16:28:11
【问题描述】:

在 MySQL 中具有以下数据库结构:

表 1:订单 带属性

  • ID(主键)
  • 交货日期
  • CUSTOMER_ID
  • RESTAURANT_ID
  • ORDER_VALUE

表 2:客户 带属性

  • ID(主键)
  • 姓名
  • 登录

表 3:餐厅

  • ID(主键)
  • 姓名
  • 城市

我想生成一个数据库查询,在其中选择客户 ID、登录名、交货日期、序列号以及从最后一个订单到倒数第二个订单的天数。

我在使用内连接和生成查询的最后两列时遇到问题:

  • 序列:每个用户可能点了任意数量的菜,如果是第三次点,我想显示一个数字,我应该可以从他的 customer_ID 和 Order_ID 中得到它
  • 最后一个订单的 DateDiff:我在获取最后一个订单和倒数第二个订单以及执行 dateDIFF 并填充列时遇到问题

到目前为止,我已经构建了以下查询:

SELECT customer_id,
       login,
       delivery_date,
       sequence,
       Datediff(second_to_last_order, last_order)
FROM   order AS t1
       INNER JOIN customer AS t2
               ON t1.customer_id = t2.id
       INNER JOIN restaurant AS t3
               ON t1.restaurant_id = t3.id;

但这显然不完整,但我被卡住了,有什么建议吗?

【问题讨论】:

  • 你的 MySQL 服务器版本是多少?此外,请提供相关且最少的样本数据,以展示您的要求,以及相应的预期输出。请阅读此链接:meta.stackoverflow.com/q/333952/2469308
  • 我之所以询问 MySQL 服务器版本是因为它看起来LEAD/LAG 窗口函数问题。这些已在 MySQL 8+ 及更高版本中提供。所以,如果你能升级到最新版本,那就太好了!

标签: mysql


【解决方案1】:

如果这是您提到的 MySQL 服务器查询,那么我建议您试一试;

SELECT CUSTOMER_ID, LOGIN, DELIVERY_DATE, SEQUENCE, DATEDIFF((SELECT MAX(z.ORDER_DATE) FROM ORDER AS z WHERE z.CUSTOMER_ID = t1.CUSTOMER_ID), (SELECT MAX(x.ORDER_DATE) FROM ORDER AS x WHERE x.CUSTOMER_ID = t1.CUSTOMER_ID AND x.ID != (SELECT MAX(x.ID) FROM ORDER AS x2 WHERE x2.CUSTOMER_ID = t1.CUSTOMER_ID)))
FROM ORDER AS a
INNER JOIN CUSTOMER AS t2 ON t1.CUSTOMER_ID = t2.ID
INNER JOIN RESTAURANT AS t3 ON t1.RESTAURANT_ID = t3.ID
ORDER BY t1;

我建议最好不要调用表“ORDER”,因为这是 MySQL 使用的关键字,您可以简单地调用表“ORDERS”来避免此问题。

这应该可以满足您的要求,如果您有任何问题,请发布任何错误文本,以便我们更好地了解您所面临的问题。

【讨论】:

  • ORDER 是 MySQL 中的保留字
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-02
  • 2011-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-29
  • 2020-06-06
相关资源
最近更新 更多