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
不錯,但是 - 這不需要DB首先轉換所有行的time_and_date列嗎? (在這種情況下並不重要,但對於大約10 000到100 000行,它可以) – 2014-09-12 22:11:29
嗯,我不確定SQL究竟是如何處理這樣的查詢的,但它必須讀取(並轉換)每一行 - 如何否則它會發現它是哪一個月。順便說一句,我只是在我的170,000行的表上運行這個查詢,並花了0.3秒。運行此查詢(和我的機器是沒有什麼特別的,所以我想沒有什麼可擔心 – Drecker 2014-09-12 22:19:12
看起來優化然後:)感謝您的答案&&測試:) – 2014-09-12 22:25:52