2012-07-15 69 views
1

我有一個查詢,我得到了幫助,但我被卡住了另一點。在SQL(MySQL)中返回基於今天日期的查詢結果

我的代碼是

SELECT a.name, COUNT(*) AS num FROM table2 b 
INNER JOIN table1 a 
ON b.status_id=a.id 
GROUP BY status_id 

我想現在要做的是隻顯示的結果,如果他們已經在當前日期進入?日期列在表2中。日期列的格式是日期和時間(例如,1341241153),由CRM以這種方式自動設置。我不確定這是什麼格式!

我只需要檢查日期是否與當天一致。我希望這很清楚。

這是一個MySQL數據庫。

任何幫助將受到感謝!

回答

2

您應該使用對持有像1341241153值日期列from_unixtime()功能。
因爲這些值似乎以unix時間戳格式存儲。

mysql> select 
    ->  from_unixtime(1341241153) as 'my_datetime_1341241153', 
    ->  date(from_unixtime(1341241153)) as 'my_date_1341241153', 
    ->  curdate(), 
    ->  curdate() > date(from_unixtime(1341241153)) 'is_today_later?', 
    ->  curdate() = date(from_unixtime(1341241153)) 'is_today_equal?', 
    ->  curdate() < date(from_unixtime(1341241153)) 'is_today_before?' 
    -> from 
    ->  dual 
    -> \G 
*************************** 1. row *************************** 
my_datetime_1341241153: 2012-07-02 20:29:13 
    my_date_1341241153: 2012-07-02 
      curdate(): 2012-07-15 
     is_today_later?: 1 
     is_today_equal?: 0 
     is_today_before?: 0 
1 row in set (0.00 sec) 

您的查詢應該是:

SELECT a.name, COUNT(*) AS num FROM table2 b 
INNER JOIN table1 a 
ON (b.status_id=a.id and curdate() = date(from_unixtime(b.crm_date_time_column))) 
GROUP BY status_id 
+0

絕對完美!非常感謝您的幫助!我已申請將此應用於大多數我需要做的除了我仍然遇到的問題之外還需要做的查詢!我爲此創建了另一個問題。如果你可以幫助解決這個問題,那也是很棒的。[鏈接](http://stackoverflow.com/問題/ 11495713 /返回結果的查詢爲基礎的今天日期在sql-mysql-part-2) – 5ummer5 2012-07-15 21:24:40

2

試試這個::

SELECT a.name, COUNT(*) AS num FROM table2 b 
INNER JOIN table1 a 
ON b.status_id=a.id 

where DATE(column_date) = DATE(now()) 
GROUP BY status_id 
+0

請記住,OP聲明'column_date'包含日期***和***時間,所以'2012-07-15 12:49:36' <>'2012-07-15 00:00:00'(輸出DATE(NOW()),即使它在同一天內。 – 2012-07-15 19:51:56

+0

thans zane,我更新了我的查詢,慷慨 – 2012-07-15 20:07:55

3

使用此解決方案:

SELECT  a.name, COUNT(*) AS num 
FROM  table2 b 
INNER JOIN table1 a ON b.status_id = a.id 
WHERE  b.datecol >= UNIX_TIMESTAMP(CURDATE()) AND 
      b.datecol < UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY) 
GROUP BY b.status_id 

這將避免你的包裹山坳日期在一個函數內部使得查詢不可查詢(即,不能使用索引)。通過保留裸數據列的比較,MySQL仍然可以使用索引(如果你在日期欄中設置了索引),它應該是非常有效的。

你甚至可以進一步簡化它,如果你ABSOLUTELY知道所輸入的日期可能永遠不會在未來某個時候(即明天或第二天):

SELECT  a.name, COUNT(*) AS num 
FROM  table2 b 
INNER JOIN table1 a ON b.status_id = a.id 
WHERE  b.datecol >= UNIX_TIMESTAMP(CURDATE()) 
GROUP BY b.status_id 

第二個條件檢查因爲它不需要檢查它是否在未來的一天。

+0

也謝謝你的答案,這也工作得很好!我有一個類似的問題與另一個一塊MySQL可以幫助嗎?[鏈接到新問題](http:// stackoverflow。com/questions/11495713/return-results-of-query-based-on-today-date-in-sql-mysql-part-2) – 5ummer5 2012-07-15 21:31:14

+0

@ 5ummer5,謝謝...我正在看它。 – 2012-07-15 21:32:03