【问题标题】:Showing data order from Monday-Sunday full week only and hide non-full week data仅显示周一至周日整周的数据顺序并隐藏非整周数据
【发布时间】:2018-08-10 10:07:19
【问题描述】:

对不起,如果我在这里拍摄新手问题。

我想创建一个周报告,但是对于这个周报告,我想要从周一到周日的完整数据

条件:

  • 仅最近 4 周
  • 显示整周(周一至周日)
  • 如果不是整周,请隐藏结果

如果我使用 getdate -14,如果我在星期三访问数据,他们将从 2 周前的星期三而不是上星期一开始计算上周的数据。同时,我希望报告只显示整周。

谁能分享如何在 SQL 中做到这一点?

这里我提供示例数据:

Column name = DATE -- Column name: TOTAL_PERSON
    - Fri, 1 Jun 2018 -- 10
    - Sat, 2 Jun 2018 -- 4
    - Sun, 3 Jun 2018 -- 12
    - Mon, 4 Jun 2018 -- 15
    - Tue, 5 Jun 2018 -- 10
    - Wed, 6 Jun 2018 -- 3
    - Thu, 7 Jun 2018 -- 1
    - Fri, 8 Jun 2018 -- 13
    - Sat, 9 Jun 2018 -- 9
    - Sun, 10 Jun 2018 -- 23
    - Mon, 11 Jun 2018 -- 5
    - Tue, 12 Jun 2018 -- 3
    - Wed, 13 Jun 2018 -- 1
    - Thu, 14 Jun 2018 -- (TODAY)

在这种情况下,如果我在 2018 年 6 月 6 日星期四访问,我只想获取从 2018 年 6 月 4 日星期一到 2018 年 6 月 10 日星期日的 TOTAL PERSON 数据,而不显示其余数据因为这周还没满。

谁能帮我怎么做?

非常感谢!

【问题讨论】:

  • MySQL SQL Server。你真正在用什么?
  • 糟糕,抱歉。我应该只标记“SQL”
  • 请在标签中指定您使用的数据库引擎
  • 标签用于 ANSI SQL。 SQL Server 和 MySQL 在日期/时间方面都不符合 ANSI SQL,因此您最好为您实际使用的 dbms 添加标签。
  • 不,您需要标记您的 RDBMS。不同的 DBMS 使用不同的 SQL“风格”。例如 SQL Server 使用 T-SQL,Oracle PL-SQL(如果我没记错的话),MySQL 也不同。

标签: sql sql-server


【解决方案1】:

我想你想要:

where datediff(week, date, getdate()) <= 2

这会计算两个日期之间的周边界数,因此它会返回一整周。

【讨论】:

    【解决方案2】:

    对于 MySQL,可以使用这样的 select:

    SELECT * FROM `myDB` WHERE `Date` 
    BETWEEN DATE_SUB(NOW()-INTERVAL DATE_FORMAT(CURRENT_DATE, '%w') DAY, INTERVAL 28 DAY) 
    AND NOW()- INTERVAL DATE_FORMAT(CURRENT_DATE, '%w') DAY
    

    这使用了将本周的当前日期转换为数字并将其减去以获得最后一个星期日的功能。从那里,我们选择 28 天的间隔。

    (只有 14 天的 testet 和非常有限的测试数据集,但应该可以工作)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-04
      • 2021-12-31
      • 1970-01-01
      • 2020-08-22
      • 1970-01-01
      • 2017-01-06
      • 1970-01-01
      相关资源
      最近更新 更多