mysql - 每周显示数据

标签 mysql sql

我在表格中有一个日期列。根据日期的选择,它应该将过去 6 周的订单计数计算为第 1 周、第 2 周...第 6 周(这不是周数,它是简单的序列号)。例如,如果用户选择日期为 12/10/2017(dd/mm/yyyy),那么它应该计算周日期的订单计数为

below image:

有人可以告诉我这在 SQL 中是否可行吗?

最佳答案

这可以通过 SQL 代码实现。

查询

SELECT  
   CONCAT(week1.first_day, '-', week1.second_day) AS Week1
 , CONCAT(week2.first_day, '-', week2.second_day) AS Week2
 , CONCAT(week3.first_day, '-', week3.second_day) AS Week3
 , CONCAT(week4.first_day, '-', week4.second_day) AS Week4
 , CONCAT(week5.first_day, '-', week5.second_day) AS Week5
 , CONCAT(week6.first_day, '-', week6.second_day) AS Week6
FROM (
 SELECT 
     DATE_FORMAT(@first_date_of_week, '%d/%m/%Y') AS first_day
   , DATE_FORMAT(@date, '%d/%m/%Y') AS second_day 
)  
 week1 
CROSS JOIN (
  SELECT 
      DATE_FORMAT(@first_date_of_week - INTERVAL 1 WEEK, '%d/%m/%Y') AS first_day
    , DATE_FORMAT(@first_date_of_week - INTERVAL 1 WEEK + INTERVAL 1 WEEK - INTERVAL 1 DAY, '%d/%m/%Y') AS second_day
) 
 week2
CROSS JOIN (
  SELECT 
      DATE_FORMAT(@first_date_of_week - INTERVAL 2 WEEK, '%d/%m/%Y') AS first_day
    , DATE_FORMAT(@first_date_of_week - INTERVAL 2 WEEK + INTERVAL 1 WEEK - INTERVAL 1 DAY, '%d/%m/%Y') AS second_day
) 
 week3 
CROSS JOIN (
  SELECT 
      DATE_FORMAT(@first_date_of_week - INTERVAL 3 WEEK, '%d/%m/%Y') AS first_day
    , DATE_FORMAT(@first_date_of_week - INTERVAL 3 WEEK + INTERVAL 1 WEEK - INTERVAL 1 DAY, '%d/%m/%Y') AS second_day
) 
 week4  
CROSS JOIN (
  SELECT 
      DATE_FORMAT(@first_date_of_week - INTERVAL 4 WEEK, '%d/%m/%Y') AS first_day
    , DATE_FORMAT(@first_date_of_week - INTERVAL 4 WEEK + INTERVAL 1 WEEK - INTERVAL 1 DAY, '%d/%m/%Y') AS second_day
) 
 week5  
CROSS JOIN (
  SELECT 
      DATE_FORMAT(@first_date_of_week - INTERVAL 5 WEEK, '%d/%m/%Y') AS first_day
    , DATE_FORMAT(@first_date_of_week - INTERVAL 5 WEEK + INTERVAL 1 WEEK - INTERVAL 1 DAY, '%d/%m/%Y') AS second_day
) 
 week6   

CROSS JOIN (
  SELECT
      @date := STR_TO_DATE('12/10/2017', '%d/%m/%Y') AS DATE
    , @first_date_of_week := @date - INTERVAL (DAYOFWEEK(@date) - 1) DAY AS first_date_of_the_week
) init_user_params

结果

Week1                  Week2                  Week3                  Week4                  Week5                  Week6                  
---------------------  ---------------------  ---------------------  ---------------------  ---------------------  -----------------------
08/10/2017-12/10/2017  01/10/2017-07/10/2017  24/09/2017-30/09/2017  17/09/2017-23/09/2017  10/09/2017-16/09/2017  03/09/2017-09/09/2017  

关于mysql - 每周显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46709178/

相关文章:

SQL Server : Find out default value of a column with a query

使用 GROUP BY 需要 Mysql 查询帮助吗?

mysql - 根据有序列表中的更改修改数据库表

java - 收到错误 "Expression expected"?

mysql - 如何复制多行但用mysql更改一个字段

mysql - 数据库SQL计数查询问题

mysql - 创建触发器时出现 SQL 错误 #1064

MySQL选择排除总和等于0的列的表

php - MySQLi 不从 JOIN 准备语句返回结果

mysql - 将 Rollup 与 ORDER BY 结合使用时出现的问题