2014-11-04 90 views
1

我有一個有100個字段的巨大表格。每行都有時間戳。我想爲所有列找到最新的非空值。我正在使用MySql 5.6 InnoDBmysql:找到最新的非空值

create table tester(
pub_id int, 
pub_name varchar(20), 
pub_city varchar(20), 
country varchar(20), 
no_of_branch varchar(20), 
estd datetime 
); 


insert into tester (pub_id, pub_name, pub_city, country, estd) 
values 
(1, 'a', 'xyz', 'abcity' , 'a', '1970-01-01 00:00:01'), 
(2, 'a', 'xyz', ''  , 'a', '1971-01-01 00:00:01'), 
(3, 'a', 'xyz', 'abcity1', 'b', '1972-01-01 00:00:01'), 
(4, 'a', 'xyz', ''  , 'a', '1973-01-01 00:00:01'), 
(5, 'a', 'xyz', 'abcity2', '' , '1974-01-01 00:00:01'), 
(6, 'b', 'lmn', 'abcity' , 'a', '1974-01-01 00:00:01'), 
(7, 'b', 'xyz', ''  , 'a', '1975-01-01 00:00:01'), 
(8, 'b', 'sdf', 'abcity1', 'b', '1976-01-01 00:00:01'), 
(9, 'b', '' , ''  , 'a', '1977-01-01 00:00:01'), 
(10, 'b', '' , 'abcity2', '' , '1978-01-01 00:00:01'); 

我要查詢這會給我:

'a', 'xyz', 'abcity2', 'a' 
'b', 'sdf', 'abcity2', 'b' 

我不想單獨使用查詢在那裏我找到空值的表中的每一列,然後採取合併爲這將是一個非常繁瑣的任務,因爲我的實際表格有100列。

我已經搜索了我們夫婦的過去的解決方案,什麼也沒找到。任何幫助將不勝感激。

謝謝

+0

什麼是你的問題?你搜索一個「棘手」的方式來做到這一點,以避免建立一個具有100個條件的查詢? – 2014-11-04 21:01:43

+0

是的。我確信有更好的方法來在SQL中執行此搜索。 – 2014-11-04 21:03:35

+0

你的算法不清楚。你如何達到這個預期的結果?看來你正在按pub_name進行分組。 – Sebas 2014-11-04 21:30:53

回答

1

這可能是你正在尋找的「棘手」方式。

首先創建一張雙表(tester2)以接收匯總數據。這個新表格必須在pub_name上有一個主鍵,並且您要彙總所有列。然後做一個INSERT INTO ON DUPLICATE KEY UPDATE。這個查詢基本上將重建tester表,但沒有重複和彙總數據。其實是這樣的:

insert into tester2 (pub_name, pub_city, country, no_of_branch) 
    select pub_name, pub_city, country, no_of_branch FROM tester order by estd desc 
on duplicate key 
update 
    pub_city = coalesce(tester2.pub_city,tester.pub_city), 
    country = coalesce(tester2.country,tester.country), 
    no_of_branch = coalesce(tester2.no_of_branch,tester.no_of_branch) 

tester2內容將是:

PUB_NAME PUB_CITY COUNTRY NO_OF_BRANCH 
a   xyz  abcity2 a 
b   sdf  abcity2 a 

深入瞭解SQL Fiddle

注意:我假設你的意思是實際NULL的值,而不是像你提供的樣品的空字符串。

+0

謝謝。這看起來像它的小提琴完美。我要在我的數據集上嘗試它並回來接受這個答案。我試圖使用if條件來檢查null和空字符串,但似乎沒有工作。這很可能意味着我做錯了什麼,但這更多的是好奇心。再次感謝 – 2014-11-05 06:31:37

+0

應該使用案例條件。 [這是小提琴](http://sqlfiddle.com/#!2/924834/1),適用於空值和空字符串 – 2014-11-05 06:47:58