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