2015-07-01 115 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时间 –