我有一个周列,其周数为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);
本质上,这个表是从其他具有日期列的表中填充的。它使用其他表中的日期,并将每周数据汇总到此。
感谢任何帮助。
答案 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
。
编辑我的回复:
避免将周值存储为字符串。相反,这里有两种方法可供选择:
YEAR, WEEKNO
YEAR
将存储值
例如 2015,2016 等,WEEKNO
将存储周数。
这样您就可以查询任何一年中任何一周的数据。答案 1 :(得分:0)
请向我展示表结构和数据库名称,因为它与其他名称不同,如果是任何时间戳,那么我们可以使用BETWEEN 'systemdate' AND 'systemdate-6'