代码之家  ›  专栏  ›  技术社区  ›  Lanz Joshua

是否可以根据用户的输入日期循环查询结果,以获取过去8周的每个收入?

  •  0
  • Lanz Joshua  · 技术社区  · 9 年前

    假设我有这张桌子

       date        revenue   
      ----------   ---------
     2017-01-01     100
     2017-01-08     100
     2017-01-15     100
     2017-01-22     100 
     2017-01-29     100
     2017-01-05     100
     2017-01-12     100
     2017-02-19     100
     2017-02-26     100
     2017-03-05     100
     2017-03-12     100
    

     date
    ----------
    2017-01-15
    2017-02-19
    2017-03-05
    

    我想这样显示它:

       date        revenue   
      ----------   ---------
     2017-01-01     100
     2017-01-08     100
     2017-01-22     100 
     2017-01-29     100
     2017-01-05     100
     2017-01-12     100
     2017-02-26     100
     2017-03-12     100
    

    我想显示过去8周的每个收入,我想使用循环跳过tableHolidays中存在的所有日期。这在PHP中可能吗?

    2 回复  |  直到 9 年前
        1
  •  0
  •   Esteban P.    9 年前

    提及:您没有标记任何特定的数据库-我的答案将涉及SQL Server:

    假设@UserDate是一个带有用户输入日期的变量

    1. 使用日期函数(特定于每个数据库系统)计算日期范围。在你的情况下,减去8周。
    2. 排除( NOT IN tableHolidays 桌子
    3. GROUP BY 周数(计算周数) WEEK SUM 收入

    查询:

      SELECT WEEK(tR.date) as weeknr
            ,SUM(tR.revenue)
        FROM tableRevenue tR
       WHERE tR.date >= DATEADD(wk,-8,@UserDate)
         AND tR.date <= @UserDate
         AND tR.date NOT IN (SELECT date FROM tableHolidays)
    GROUP BY WEEK(tR.date)
    
        2
  •  0
  •   Fahmi B.    9 年前


    有关更多信息,请访问此链接 https://www.w3schools.com/sql/sql_any_all.asp

    $userInput = '2017-03-12';
    $sql = "SELECT  `date`, `revenue`
    FROM `tableRevenue`
    WHERE ( 
     (`date` = ANY 
       (SELECT `date` FROM `tableHolidays` WHERE DATE(date)<='{$userInput}'))  
     AND (DATE(date) <='{$userInput}')
    )";