2014-05-13 67 views
0

我在postgresql上有一個很大的表,我想要得到多個結果集作爲SELECT查詢的輸出,如果可能的話?從SELECT查詢中獲取多個結果集

我的表看起來像這樣:

select * from dns_table 

id | dns_name | ip_source | mac_source  |   query_time   
-----+----------------+------------+-------------------+---------------------------- 
    1 | google.com  | /10.0.0.1 | 00-00-00-00-00-01 | 2014-05-12 10:03:03.503938 
    2 | facebook.com | /10.0.0.1 | 00-00-00-00-00-01 | 2014-05-12 10:03:04.567417 
    3 | google.com  | /10.0.0.5 | 00-00-00-00-00-05 | 2014-05-12 10:03:05.372453 
    4 | youtube.com | /10.0.0.1 | 00-00-00-00-00-01 | 2014-05-12 10:03:05.636633 
    5 | facebook.com | /10.0.0.5 | 00-00-00-00-00-05 | 2014-05-12 10:03:06.420067 
    6 | yahoo.com  | /10.0.0.1 | 00-00-00-00-00-01 | 2014-05-12 10:03:06.685871 
    7 | google.com  | /10.0.0.6 | 00-00-00-00-00-06 | 2014-05-12 10:03:07.198905 
    8 | youtube.com | /10.0.0.5 | 00-00-00-00-00-05 | 2014-05-12 10:03:07.524503 
    9 | wikipedia.org | /10.0.0.1 | 00-00-00-00-00-01 | 2014-05-12 10:03:07.747143 
    10 | facebook.com | /10.0.0.6 | 00-00-00-00-00-06 | 2014-05-12 10:03:08.287584 
    11 | yahoo.com  | /10.0.0.5 | 00-00-00-00-00-05 | 2014-05-12 10:03:08.572827 
    ... 
    ... 

我要的是:

SELECT 
    count(dns_name) as hits, 
    dns_name, 
    to_char(query_time - interval '1 month','YYYY,MM,DD,HH24,MI') as qt 
FROM dns_table 
where dns_name like '**google.com**' 
group by dns_name, qt 
order by qt; 

hits | dns_name |  qt   
------+------------+------------------ 
    61 | google.com | 2014,04,12,10,03 
    40 | google.com | 2014,04,12,15,05 
    45 | google.com | 2014,04,13,09,34 

所以我想知道如果是有可能,以便參數來代替google.com獲得每個dns_namegoogle.com,facebook.com,yahoo.com,...)的結果集。

不要猶豫,任何問題!

+0

我真的不明白......你沒有得到一個「表」的結果的選擇查詢,我不知道如何獲得「子表」。你會如何預期它的行爲?您可以爲每個參數運行單獨的查詢。 – mareckmareck

+2

你只是想要刪除'where'標準並將'dnsname'添加到組中? – sgeddes

+0

我希望它不會重複表中所有dns_name的相同查詢(太單調乏味)! – midobAck

回答

0

您無法獲得多個結果集。你將不得不從你的應用程序中請求每個系列。最前一頁得到所有的名字:

select distinct dns_name 
from dns_table 
order by dns_name; 

然後詢問一系列傳遞名稱作爲參數:

select 
    count(dns_name) as hits, 
    dns_name, 
    date_trunc('minute', query_time) as qt 
from dns_table 
where 
    query_time > now() - interval '1 month' 
    and 
    dns_name = :dns_name 
group by qt 
order by qt; 
+0

謝謝@Clodoaldo,但它不是我想要的! – midobAck

+0

@midob爲一系列查詢編輯 –

+0

錯誤:在或接近「:」的語法錯誤: LINE 9:dns_name =:dns_name – midobAck

相關問題