SQL Query在两周之间获取数据?

时间:2016-02-04 06:31:26

标签: mysql sql date

我有一个周列,其周数为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);

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

感谢任何帮助。

2 个答案:

答案 0 :(得分: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 post。
  2. 维护两列 - YEAR, WEEKNO YEAR将存储值 例如 2015,2016 等,WEEKNO将存储周数。 这样您就可以查询任何一年中任何一周的数据。

答案 1 :(得分:0)

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