2012-07-13 84 views
0

我有一個查詢,我得到了昨晚的幫助,但我被卡住了另一個位。基於今天的日期的SQL查詢

我的代碼是

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

我想什麼,現在做的是隻顯示的結果,如果他們已經在今天的日期進入?日期欄位於table2。日期列的格式是日期和時間(例如1341241153),但我只需檢查日期是否與當天一致。我希望這很清楚。

任何幫助將受到感謝!

編輯:這是一個MySQL數據庫。到目前爲止,我已經嘗試了所有的解決方案,並沒有奏效。對不起,不清楚!

FINAL EDIT:問題不夠清楚,所以爲了得到快速回復我再次發佈。與完整的解決方案,新的問題在這裏可以看到a link

+0

什麼樣的日期時間格式是'134124115'?我猜這是今年4月13日,但誰能說?這可能就是船長日誌的保留。如果您不打算使用實際的日期/日期時間數據類型來存儲日曆信息,您必須*保持嚴格定義的格式。否則,你的數據只是垃圾。 – APC 2012-07-13 20:22:10

+0

我不知道日期格式,說實話這是什麼CRM在使用時自動使用 – 5ummer5 2012-07-14 00:23:49

+0

如果*你*不知道日期格式是什麼,你期望*我們*爲什麼?讓我們清楚這一點,如果你不知道格式,那麼從時間元素中分離日期元素絕對不可能。所以你需要開始四處詢問,閱讀手冊或谷歌搜索關鍵信息。 – APC 2012-07-15 15:03:29

回答

1

如果你group你需要的having代替where

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

你可以創建自己的功能,如果你這樣做往往要做到這一點,但這裏的一些代碼,以展中傳遞的任何日期是:

SELECT a.name, COUNT(*) AS num 
FROM table2 b 
INNER JOIN table1 a ON b.status_id=a.id 
WHERE DATEADD(dd, 0, DATEDIFF(dd, 0, a.DateColumn)) = DATEADD(dd, 0, DATEDIFF(dd, 0, GETDATE())) 
GROUP BY status_id 
0

不知道哪個數據庫類型,這是,如果它是Oracle,你只需要截斷日期:

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

如果是MySQL或MSSQL,語法稍有不同,但同樣簡單。

+0

嗨,對不起,我不清楚,這是MySQL – 5ummer5 2012-07-14 00:26:36

0

在SQL Server 2008中您可以使用此:

SELECT a.name, COUNT(*) AS num FROM table2 b 
INNER JOIN table1 a 
ON b.status_id=a.id 
WHERE dateValue BETWEEN 
    CAST(GETDATE() AS DATE) AND DATEADD(DAY, 1, CAST(GETDATE() AS DATE)) 
GROUP BY status_id 
+0

這聽起來有點奇怪,但我個人發現,如果你打算這樣做,你可以得到一個更好的查詢計劃,允許平行如果你把這些函數拿出來,聲明一個StartDate日期和一個EndDate日期。然後將它們設置爲:StartDate = CAST(GETDATE()AS DATE)和EndDate = CAST(GETDATE()AS DATE)然後,您可以:WHERE dateValue BETWEEN StartDate和EndDate。當SQL在這裏的某些查詢中實際使用更多內核時,我發現它很有幫助。希望注意到這一點。變量會有@。愚蠢的編輯說,它需要5分鐘來輸入這個。 – Cericme 2012-07-13 20:55:57

+1

@Cericme你知道嗎,你可以刪除評論?你也可以在評論中使用反引號'StartDate = CAST(GETDATE()AS DATE)和EndDate = CAST(GETDATE()AS DATE)' – 2012-07-13 21:03:01

+0

@ConradFrix謝謝。由於某種原因,刪除按鈕前幾天沒有顯示給我,我也不知道評論中的反引號。因此,我的原始評論中的SQL位是:聲明@StartDate日期,@EndDate日期; SELECT @StartDate = CAST(GETDATE()AS DATE),@EndDate = CAST(GETDATE()AS DATE);'然後Where部分:'WHERE dateValue BETWEEN @StartDate AND @ EndDate' – Cericme 2012-07-16 15:07:48