我花了幾天的時間來創建這個相當複雜的SQL語句,現在它給了我完全我想要的。現在我想知道是否有更好/更簡單的方法來做到這一點。另外的MySQL不會讓我CREATE VIEW這句話是否有可能通過多個子查詢和JOIN來簡化此SQL語句
SELECT name, a.user, liste, c.order, total_1kr, total_5kr, total_8kr, total_10kr, total_paid, differens, sbdato, spaid, sbreg, sfdato, sforbrug, sfreg
FROM (SELECT t.user, t.paid AS spaid, t.dato AS sbdato, t.registrant AS sbreg FROM(
SELECT user,MAX(dato) AS maksdato
FROM g_kiosk_f WHERE paid!=0
GROUP BY user) AS x
JOIN g_kiosk_f AS t ON x.user =t.user
AND x.maksdato = t.dato) AS a
JOIN (SELECT s.user, (s.1kr+(s.5kr)*5+(s.8kr)*8+(s.10kr)*10) AS sforbrug, s.dato AS sfdato, s.registrant AS sfreg FROM(
SELECT user,MAX(dato) AS maksdato
FROM g_kiosk_f WHERE 1kr!=0 OR 5kr!=0 OR 8kr!=0 OR 10kr!=0
GROUP BY user) AS y
JOIN g_kiosk_f AS s ON y.user=s.user
AND y.maksdato=s.dato) AS b
JOIN (SELECT t1.name, t2.user, t1.liste, t1.order, sum(t2.1kr) AS total_1kr, sum(t2.5kr) *5 AS total_5kr, sum(t2.8kr) *8 AS total_8kr, sum(t2.10kr) *10 AS total_10kr, sum(t2.paid) AS total_paid, (sum(t2.1kr) + sum(t2.5kr) *5 + sum(t2.8kr) *8 + sum(t2.10kr) *10 - sum(t2.paid)) AS differens
FROM g_kiosk_users AS t1
INNER JOIN g_kiosk_f AS t2 ON t1.nr = t2.user
GROUP BY t2.user
ORDER BY t1.name ASC) AS c
ON a.user=b.user AND a.user=c.user
我有一個表 'g_kiosk_f' 包含ID(用戶),日期(日期),5個種類的交易(1KR,5kr,8kr,10kr,並支付)出納員(註冊人)。另一個表'g_kiosk_users'包含名稱和id(nr)。 我想展示
- 最新交易,其中支付日期,註冊和金額的結果集合!= 0
- 最新交易日期,註冊和金額,其中1KR!= 0,5kr!= 0, 8kr!= 0或10kr!= 0
- 總和的總差值(1KR + 5kr + 8kr + 10kr)和金額(支付)
所以結果應該是這個樣子
Name | id | difference | newest paid date | newest paid registrant | newest paid amount | newest kr date | newest kr registrant | newest kr amount |
在上面我已經包含了手動進行差異計算所需的數字,因爲它在某個時刻需要,但現在已經過時。這是否有任何意義?
請問這個部分「'FROM g_kiosk_f WHERE 1KR = 0或5kr = 0或8kr = 0或10kr! = 0''工作?標識符通常需要以非數字開頭,但顯然你可以用數字開始標識符。這是MySQL的擴展嗎? –
由於MySQL不支持CTE(Common Table Expressions,又名'WITH子句'),所以沒有機會使用一個用於(幾乎)重複的子查詢'FROM(SELECT user,MAX(dato)AS maksdato FROM g_kiosk_f GROUP BY用戶)AS x JOIN g_kiosk_f AS t ON x.user = t.user AND x.maksdato = t.dato)AS a'。因爲有兩種稍微不同的過濾條件('WHERE paid!= 0'和'WHERE 1kr!= 0 OR 5kr!= 0 OR 8kr!= 0 OR 10kr!= 0'),所以你不清楚無論如何,都可以使用CTE。你可以做很多事情來改善這種狀況。這只是一個很大的混亂的查詢。 –
您能否介紹一下您試圖獲得的更高級別的結果? – Himanshu