2015-08-22 47 views
1

兩個值我使用下面的代碼以提取最新的平衡值(按日期和時間),每星期我的數據庫:MySQL的 - JOIN功能 - 返回時相同的過濾條件都滿足

SELECT t.id, t.date, t.time, t.balance FROM db1 t 
JOIN (SELECT tt.cw, MAX(timestamp(tt.date,tt.time)) as 'maxtime' 
FROM db1 tt GROUP BY tt.cw) m ON m.maxtime = timestamp(t.date,t.time) AND t.cw = m.cw; 

代碼工作正常,但我遇到以下問題:

每當最新值具有完全相同的時間戳(當兩個條目完全相同的秒)時,結果顯示兩個行都具有相應的值。現在我不知何故只希望查詢每週顯示一個值。

我嘗試了一些DISTINCT版本,這一切都不起作用。

非常感謝您的幫助! 乾杯

:UPDATE: 這裏DB1的結構的一個例子:

+----+------------+-------+----+---------+ 
| id | date | time | cw | balance | 
+----+------------+-------+----+---------+ 
| 1 | 2015-01-01 | 13:01 | 1 |  100 | 
| 2 | 2015-01-01 | 17:01 | 1 |  110 | 
| 3 | 2015-01-02 | 14:01 | 1 |  120 | 
| 4 | 2015-01-15 | 13:01 | 3 |  140 | 
| 5 | 2015-01-15 | 13:01 | 3 |  140 | 
+----+------------+-------+----+---------+ 

結果看起來像這樣:

+----+------------+-------+----+---------+ 
| id | date | time | cw | balance | 
+----+------------+-------+----+---------+ 
| 3 | 2015-01-02 | 14:01 | 1 |  120 | 
| 4 | 2015-01-15 | 13:01 | 3 |  140 | 
| 5 | 2015-01-15 | 13:01 | 3 |  140 | 
+----+------------+-------+----+---------+ 

但應該只交付:

+----+------------+-------+----+---------+ 
| id | date | time | cw | balance | 
+----+------------+-------+----+---------+ 
| 3 | 2015-01-02 | 14:01 | 1 |  120 | 
| 5 | 2015-01-15 | 13:01 | 3 |  140 | 
+----+------------+-------+----+---------+ 
+0

'show create table db1' output please。樣本數據,所需結果。所以3件事 – Drew

+0

我把樣品數據放在上面的問題中,謝謝 – Benvaulter

+0

要麼你沒有顯示整個表或者你的設計有問題。 「id」字段代表什麼?如果它只是一個遞增值,那麼你的模型就會被破壞;你如何將餘額與賬戶聯繫起來?似乎你需要別的東西來使餘額行變得獨一無二。 – Tony

回答

1

我希望這足夠沒有冗長的解釋,作爲你在那裏99%。我指望的id的AUTO_INCREMENT:

create table db1 
( id int auto_increment primary key, 
    date date not null, 
    time time not null, 
    cw int not null, 
    balance decimal(10,2) not null 
); 
insert db1 (date,time,cw,balance) values ('2015-01-01','13:01',1,100); 
insert db1 (date,time,cw,balance) values ('2015-01-01','17:01',1,110); 
insert db1 (date,time,cw,balance) values ('2015-01-02','14:01',1,120); 
insert db1 (date,time,cw,balance) values ('2015-01-15','13:01',3,140); 
insert db1 (date,time,cw,balance) values ('2015-01-15','13:01',3,140); 

SELECT t.id, t.date, t.time, t.balance 
FROM db1 t 
JOIN 
( SELECT tt.cw, MAX(id) as 'max_id' 
    FROM db1 tt 
    GROUP BY tt.cw 
) m 
ON t.id=m.max_id; 

+----+------------+----------+---------+ 
| id | date  | time  | balance | 
+----+------------+----------+---------+ 
| 3 | 2015-01-02 | 14:01:00 | 120.00 | 
| 5 | 2015-01-15 | 13:01:00 | 140.00 | 
+----+------------+----------+---------+ 
+0

就是這樣。關鍵是日益增長的ID。我在這裏想的太複雜了。謝謝 – Benvaulter

0

如果妳想要一個只有一個把使用集團通過。

後您查詢只需要添加

GROUP BY id,cw desc Having Max(date) =t.date and Max(time)=t.time; 

抱歉,我不能寫實際的查詢,請修改查詢到你的實際使用。

+0

您使用Join的方式很複雜,而且必須執行。 –