2015-07-01 113 views
-1

我必須加入三個表。加入三個表的sql查詢

1表是交易,下表是商店,3是天氣。

我想從所有這三個數據中獲取數據,但是在天氣表> id,tamp_c,datetime列名的情況下。

查詢是: -

select HOUR(transaction.time) as Hour , 
     TRUNCATE(sum(transaction.total),2) as Total_Sales, 
     shops.gstIncludedSales as GST_Inc_Sales, 
     shops.gstFreeSales as GST_Free,weather.temp_c 
     from transaction,shops,weather 
     where transaction.shopid=shops.id and transaction.shopid=7 
     and transaction.transaction_date ='2015-05-25' 
     group by hour 
     ORDER BY hour DESC 

的問題是,我想申請一個where子句像time(datetime)='2015-05-25'特定日期weather.datetime表的分離,但它不工作。

+0

你試過'日期(weather.datetime)='2015-05-25''什麼? – vhu

+0

對於其他任何一個表,似乎都沒有天氣的連接條件。你會得到什麼結果,你期望什麼? – PaulF

+0

感謝您的回覆保羅我想獲取此表也SELECT * FROM'天氣WHERE日期(datetime)='2015-05-25'和shop_id = 7 –

回答

0

試試這個:

WHERE transaction.transaction_date> = '2015年5月25日' 和transaction.transaction_date < '2015年5月26日'

這將在整個一天的時間戳返回行(午夜至午夜 - 時間隱含)。

如果你有SQLServer 2014,你可以使用DATE(transaction.transaction_date)。

+0

或者_WHERE transaction.transaction_date BETWEEN'2015-05-25'AND '2015-05-26'_或DATE函數(假設爲MySQL) – PaulF

+0

您還將從2015-05-26 00:00:00獲取記錄與該語句之間的記錄。日期函數已經在我的答案中:) – SAS

+0

你是對的 - 剛注意到我測試的數據在第二天沒有任何數據 - 所以似乎工作。日期函數 - 我評論這是可用的MySQL以及SQLServer 2014 – PaulF

0

這是否你想

SELECT HOUR(transaction.time) as Hour , 
    TRUNCATE(sum(transaction.total),2) as Total_Sales, 
    shops.gstIncludedSales as GST_Inc_Sales, 
    shops.gstFreeSales as GST_Free,weather.temp_c 
FROM transaction 
JOIN shops ON transaction.shopid=shops.id 
JOIN weather ON DATE(transaction.transaction_date) = DATE(weather.datetime) 
WHERE DATE(transaction.transaction_date)='2015-05-25' AND transaction.shopid=7 
GROUP by hour 
ORDER BY hour DESC 

(假設你正在使用MySQL)

+0

感謝您的答覆,但我的問題是,日期列也是在交易表以及天氣表也日期時間列,所以我想從天氣表的記錄與where子句日期(weather.datetime)='2015-05-25'因此在不同的表上使用兩個單獨的日期。在此先感謝 –

+0

我不確定你的意思 - 你能展示三個表格的結構並給出一些預期結果的例子。 – PaulF

+0

天氣=> \t ID \t shop_id \t \t temp_c \t日期時間 商店=> \t ID \t gstIncludedSales \t GST_Inc_Sales, \t gstFreeSales transacion => \t ID \t交易 \t總 \t時間 –