2014-09-12 75 views
1

我有一個表,該表是這樣的MySQL只選擇行AVAILABLE個月DATETIME

id | title | text | time_and_date (DATETIME) 

現在我想找出個月都沒有用,
可以有含有同月0-X行在time_and_date。

甚至更​​好的月份是可用的根據我的WHERE查詢(我已經完成了那部分)。

因此,從表像

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)如果某個月沒有行 - 那個月根本沒有返回。我知道(我猜)這是一些完美的「GROUP BY案」,但我只是無法弄清楚我將如何構造這個查詢。

我會慶幸,即使是指出:-)

我的最終解決方案的正確方向

中的條目「只選擇當前或未來幾年提供+月」:

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 

回答

2
SELECT DISTINCT MONTH(time_and_date) AS month 

DISTINCT表示僅返回每個值的一次,MONTH()只返回月份(不是整個日期),AS部分不是強制性的(只是爲了使列名稱「正常」)

+0

不錯,但是 - 這不需要DB首先轉換所有行的time_and_date列嗎? (在這種情況下並不重要,但對於大約10 000到100 000行,它可以) – 2014-09-12 22:11:29

+1

嗯,我不確定SQL究竟是如何處理這樣的查詢的,但它必須讀取(並轉換)每一行 - 如何否則它會發現它是哪一個月。順便說一句,我只是在我的170,000行的表上運行這個查詢,並花了0.3秒。運行此查詢(和我的機器是沒有什麼特別的,所以我想沒有什麼可擔心 – Drecker 2014-09-12 22:19:12

+0

看起來優化然後:)感謝您的答案&&測試:) – 2014-09-12 22:25:52