Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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仅从带有DATETIME的行中选择可用月份_Mysql_Sql_Datetime_Group By - Fatal编程技术网

MySQL仅从带有DATETIME的行中选择可用月份

MySQL仅从带有DATETIME的行中选择可用月份,mysql,sql,datetime,group-by,Mysql,Sql,Datetime,Group By,我有一张像这样的桌子 id | title | text | time_and_date (DATETIME) 现在我想知道有几个月的时间, 可以有0-X行包含时间和日期相同的月份 或者更好的是,根据我在查询中的位置(我已经完成了这一部分),有哪些月份可用 所以从餐桌上 id | title | text | time_and_date (DATETIME) 5 | 'title

我有一张像这样的桌子

 id    |    title    |    text    |    time_and_date (DATETIME)
现在我想知道有几个月的时间,
可以有0-X行包含时间和日期相同的月份

或者更好的是,根据我在查询中的位置(我已经完成了这一部分),有哪些月份可用

所以从餐桌上

   id     |     title      |     text      |    time_and_date (DATETIME)
    5     |    'title1'    |    'text1'    |    '2008-12-24 07:00:00'
    7     |    'title2'    |    'text2'    |    '2008-11-24 12:20:11'
   20     |    'title3'    |    'text3'    |    '2008-08-24 06:00:57'
    1     |    'title4'    |    'text4'    |    '2008-08-24 19:20:45'
结果应该是这样的

12
11
08
请注意:
1) 如果同一月份有多行,则该月份只返回一次
2) 如果某个月没有行,则根本不返回该月

我知道(我猜)这是一个完美的“for
groupby
case”,但我不知道该如何构造这个查询

我会感谢你为我指出了正确的方向:-)

我的最终解决方案 “在条目中仅选择当前或未来可用年份+月份”

SELECT DISTINCT MONTH(time_and_date) month, YEAR(time_and_date) year
 FROM entries
 WHERE time_and_date>=NOW()
 ORDER BY time_and_date DESC

DISTINCT
意味着将只返回每次出现的值一次,
MONTH()
只返回月份(不是整个日期),
AS
部分不是必需的(只是为了使列名“正常”)

很好,但是-这不需要DB首先转换所有行的time和date列吗?(在这种特殊情况下,这无关紧要,但对于大约10000到100000行,它可以)好吧,我不确定SQL是如何处理此类查询的,但它必须读取(并转换)每一行,否则它将如何找到它的月份。顺便说一句,我只是在我的170000行表上运行这个查询,耗时0.3秒。要运行此查询(我的机器没有什么特别之处,所以我想没有什么需要担心的优化书籍:)感谢您的回答和测试:)@jave.web抱歉,我刚刚意识到我在尝试此查询的列上有索引:D(我真的没有太多索引列…)-我只是在同一个表的一个非索引列上进行了尝试,花了4秒-这并不可怕,但仍然不坏。此外,我怀疑有没有更快的办法。
SELECT DISTINCT MONTH(time_and_date) AS month