【问题标题】:SQL Query to get data between two weeks?SQL Query 在两周之间获取数据?
【发布时间】:2016-05-13 15:38:25
【问题描述】:

我有一个周列,周数为w0, w1, w2...。我正在尝试获取最近六周的数据。这是我正在使用的 sql 查询。

SELECT * FROM week 
WHERE uid = '9df984da-4318-1035-9589-493e89385fad'       
  AND report_week BETWEEN `'w52' AND 'w5'`;

'w52' 基本上是 2015 年 12 月的第 52 周,'w5' 是 2016 年 1 月。'between' 似乎不起作用。获取上述两周数据的最佳方式是什么?

这是 CREATE TABLE 语句:

CREATE TABLE `week` (`uid` VARCHAR(255) DEFAULT '' NOT NULL,
                     `report_week` VARCHAR(7) NOT NULL,
                     `report_files_active` BIGINT DEFAULT NULL);

本质上,此表是从具有日期列的其他表中填充的。它使用其他表中的日期并将每周数据汇总到此表中。

感谢任何帮助。

【问题讨论】:

  • 你不是在表中存储时间戳值吗?
  • 显示你的表结构。附上你的表的create table语句。
  • between 是替换“大于等于和小于等于”的组合,但您的情况正好相反。你在表中存储日期吗?
  • 为什么要存储'w'?
  • 将周数存储为整数。

标签: mysql sql date


【解决方案1】:

请参阅此SO Discussion,其中详细说明了与您类似的问题的原因。

BETWEEN 'a' and 'b' 实际上匹配 columnValue >='a' and columnValue <= 'b'

在您的情况下,由于字符串的字典顺序,w52 大于 w5 - 这意味着 BETWEEN 子句永远不会返回 true(将其视为相当于说BETWEEN 10 and 1 而不是BETWEEN 1 and 10

编辑我的回复:

不要将周值存储为字符串。相反,这里有几种方法,按他们的偏好顺序排列:

  1. 有一个时间戳列。然后您可以轻松地使用 MySQL 查询 设施从中提取周信息。为一个 参考见this 帖子。
  2. 维护两列 - YEAR, WEEKNO 其中YEAR 将存储值 像 2015, 2016 等,WEEKNO 将存储周数。 这样您就可以查询任何一年中任何一周的数据。

【讨论】:

    【解决方案2】:

    请告诉我表结构和数据库名称,因为它与其他不同,如果它是任何时间戳,那么我们可以使用 BETWEEN 'systemdate' AND 'systemdate-6'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多