台灣最大程式設計社群網站
線上人數
1225
 
會員總數:245894
討論主題:189492
歡迎您免費加入會員
討論區列表 >> MySQL >> 關於下SQL語法查詢問題
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
關於下SQL語法查詢問題
價值 : 100 QP  點閱數:302 回應數:11
樓主

羊駝桑
門外漢
0 1
18 7
發送站內信

各位大哥好

小弟算是新手對於表單合併及運算有點問題想來請教大家!
目前我有表單A與表單B,目的是要將表單A.資料A盡可能還原成表單B.資料B!

使用表單B中9點整的資料 與 表單A中9點整的資料 相除 獲得"係數"!
再將表單A中當天所有資料 乘以 當天對應的"係數"。
(例:表單B中2016-01-01 09:00:00的資料為20,除以表單A中2016-01-01 09:00:00的資料為21.9,可得係數0.9,再將表單A中2016-01-01所有資料乘以"係數"可得新的數字)
目標像是tableD的呈現方式,主要呈現tableD中的資料C。

因為表單A與表單B時間間隔不同欄位數也不同
所以小弟不懂如何下指令將表單A資料乘以當天對應的"係數"

目前只能呈現tableC的樣式
再麻煩大大們指點一下,感謝!

tableA

日期 資料A
-----------------------------------
2016-01-01 07:00:00 21.9
2016-01-01 08:00:00 21.9
2016-01-01 09:00:00 22.1
2016-01-01 10:00:00 21.9
2016-01-02 07:00:00 22.2
2016-01-02 08:00:00 22.9
2016-01-02 09:00:00 22.5


tableB

日期 資料B
-----------------------------------
2016-01-01 09:00:00 20
2016-01-02 09:00:00 15
2016-01-03 09:00:00 29
2016-01-04 09:00:00 30


tableC

日期 資料A 資料B 係數
---------------------------------------------
2016-01-01 07:00:00 21.9 NULL NULL
2016-01-01 08:00:00 21.9 NULL NULL
2016-01-01 09:00:00 22.1 20 0.9
2016-01-01 10:00:00 21.9 NULL NULL
2016-01-02 07:00:00 22.2 NULL NULL
2016-01-02 08:00:00 22.9 NULL NULL
2016-01-02 09:00:00 22.5 15 0.7


tableD

日期 資料A 資料B 係數 資料C
-------------------------------------------------------
2016-01-01 07:00:00 21.9 NULL 0.9 19.71
2016-01-01 08:00:00 21.9 NULL 0.9 19.71
2016-01-01 09:00:00 22.1 20 0.9 20
2016-01-01 10:00:00 21.9 NULL 0.9 19.71
2016-01-02 07:00:00 22.2 NULL 0.7 15.54
2016-01-02 08:00:00 22.9 NULL 0.7 16.03
2016-01-02 09:00:00 22.5 15 0.7 15

搜尋相關Tags的文章: [ SQL ] , [ 合併 ] , [ 運算 ] ,
本篇文章發表於2020-04-27 03:01
1樓
作者回應

羊駝桑
檢舉此回應
因表隔間隔有點亂 改成圖片上傳
本篇文章回覆於2020-04-27 09:53
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

老頑童
捐贈 VP 給 老頑童 檢舉此回應
先以tableB join tableA on tableB.日期時間 = tableA.日期時間,得到每日的係數 as tableC
再以tableA join tableC on tableA.日期 = tableC.日期 即得到你要的資料(注意,此處只用日期,不加時間)


1. 會有誤差,例22.1 X 0.9 = 19.89, 不是你要的20
2. 不會顯示NULL
若你要完全跟tableD長的一模一樣,要再做一些加工
本篇文章回覆於2020-04-27 11:13
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

羊駝桑
檢舉此回應
想請問老頑童大大
如果只有tableA與tableB兩個實體表單
可直接生成像tableD的樣式嗎?
主要顯示tableD.資料C!
本篇文章回覆於2020-04-27 12:52
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
最有價值解答

老頑童
捐贈 VP 給 老頑童 檢舉此回應
把1樓說的第一段當成子查詢,大概類似

至於顯示NULL那些需再另外加工
本篇文章回覆於2020-04-27 13:11
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

羊駝桑
檢舉此回應
謝謝老頑童大大的回覆
關於顯示NULL的部份沒關係哦!
因為我不是很了解想再請教您!
tableC不是實體表單,是我目前合併所顯示的樣式。
可是他不是我想要的顯示,可能造成您誤會了,不好意思。

目前擁有的只有tableA與tableB表單!
是否直接利用tableA與tableB表單生成tableD的樣式嗎?
主要顯示tableD.資料C,沒有NULL也沒關係哦!
再次謝謝您!
本篇文章回覆於2020-04-27 13:33
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
回應

老頑童
捐贈 VP 給 老頑童 檢舉此回應
tableC是由tableA及tableB JOIN 來的,並不是實體表格
也就是3樓堻o一段
(Select A.MyDate, A.MyInt as MyInt1, Round(A.MyInt/B.MyInt, 1) as MyRate from Test2 A
left outer join Test1 B on A.MyDate = B.MyDate) D

拿這一段再跟tableA再做一次JOIN就能產生你要的tableD
並不是指要先有tableC的實體表格,tableC只是子查詢
本篇文章回覆於2020-04-27 14:07
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

羊駝桑
檢舉此回應
謝謝老頑童大大分析
我再試試看!不懂的地方再請教您!
目前概念了解但語法有點難釐清
像照老頑童大大所說的
(Select A.MyDate, A.MyInt as MyInt1, Round(A.MyInt/B.MyInt, 1) as MyRate from Test2 A
left outer join Test1 B on A.MyDate = B.MyDate) D
這是tableC的部份。
那像是第一段中有from test1 C 的部份?是什麼意思呢?我不是沒有tableC嗎?
又怎麼呼叫他呢?
本篇文章回覆於2020-04-27 17:57
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

羊駝桑
檢舉此回應
因為老頑童大的語法有看到抓ABCD表單底下欄位
能麻煩老頑童大大說明解析一下SQL語法
語法中哪裡去定義tableC與tableD?
不好意思問題很新手
麻煩您上一課
本篇文章回覆於2020-04-27 18:06
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

老頑童
捐贈 VP 給 老頑童 檢舉此回應
from test1 C 後面的C是alias name,就是為test1 取暱稱為 C
後面就能用C.MyDate之類取代test1.MyDate
一來比較簡短,二來,若command中有兩個from test1,取不同暱稱可避免混淆
那個C跟tableC沒任何關係,只是我比較懶,都只用A,B,C,D,E當暱稱
本篇文章回覆於2020-04-27 18:15
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
10樓
作者回應

羊駝桑
檢舉此回應
哈哈,了解!
雖然我還沒寫出來!
但是學到了不少!
感謝老頑童大大!
點數雙手奉上!
本篇文章回覆於2020-04-27 18:34
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
11樓
作者回應

羊駝桑
檢舉此回應
謝謝老頑童大大
有跑出我想要的成果了!
小弟再次向您感謝!
謝謝您不吝嗇的賜教!
本篇文章回覆於2020-04-27 19:19
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.