Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL选择一年中的哪一天和哪一年之间的记录_Mysql_Sql_Date_Select_Date Range - Fatal编程技术网

MySQL选择一年中的哪一天和哪一年之间的记录

MySQL选择一年中的哪一天和哪一年之间的记录,mysql,sql,date,select,date-range,Mysql,Sql,Date,Select,Date Range,我有一个表格,我在其中插入年、月数、周数和年的日数以及每条记录 我使用这些字段来过滤记录而不是完整日期,因为我有数百万条记录,我想通过比较整数而不是日期来提高性能 我能够根据日期和年份选择日期之间的记录。如果年份相同,查询效果很好,但是一旦我更改了年份,查询就不起作用了,因为我正在使用AND 表如下所示: 身份证 一天 周 月 年 完整日期 这是工作查询 SELECT COUNT(id) AS records_count FROM table1 WHERE table1.day >=

我有一个表格,我在其中插入年、月数、周数和年的日数以及每条记录

我使用这些字段来过滤记录而不是完整日期,因为我有数百万条记录,我想通过比较整数而不是日期来提高性能

我能够根据日期和年份选择日期之间的记录。如果年份相同,查询效果很好,但是一旦我更改了年份,查询就不起作用了,因为我正在使用AND

表如下所示:

  • 身份证
  • 一天
  • 完整日期
这是工作查询

SELECT COUNT(id) AS records_count
FROM table1
WHERE table1.day >= 176
AND table1.day <= 275
AND table1.year <= 2015
AND table1.year >= 2015
选择COUNT(id)作为记录\u COUNT
来自表1
其中表1.day>=176
表1.1日=275
表1.day
选择COUNT(id)作为记录\u COUNT
来自表1
其中(年=2014,日>=275)

或者(year=2015和day您存储日期的方法与您想要做的完全不符。一般形式为:

where (year = 2014 and day >= 275 or year > 2014) and
      (year = 2015 and day <= 176 or year < 2015)
其中(年份=2014,日期>=275或年份>2014)和
(年份=2015,日期=makedate(2014,275)和日期通用解决方案(例如,可以从2000年到2020年)

选择计数(id)作为cnt
来自tbl
式中((年>最小年以下,年<最大年以上)
和((年最小年和年最大年)
或(年=最小年和天>265)
或(年=最大年和日<300)))

问题在于,您需要计算年份小于或等于2014年、同一年份大于或等于2015年的记录。没有任何数字小于或等于2014年、同一时间大于或等于2015年。

OP注意:此答案仅适用于相邻年份(或同一年份)。它不能概括为任何一对日期。删除了我的评论,正如你所说的那样。很有魅力。谢谢!
SELECT COUNT(id) AS records_count
FROM table1
WHERE (year = 2014 and day >= 275)
   OR (year = 2015 and day <= 176)
where (year = 2014 and day >= 275 or year > 2014) and
      (year = 2015 and day <= 176 or year < 2015)
where date >= makedate(2014, 275) and date <= makedate(2015, 176)
SELECT COUNT(id) AS cnt
FROM tbl
WHERE ((year > under_min_year and year < above_max_year)
      and ((year <> min_year and year <> max_year)
           or (year = min_year and day > 265)
           or (year = max_year and day < 300)))