2011-11-01 75 views
0

我需要爲每個company_name和node_name獲取表T_TBL_DATA中的第一個文本(具有最低row_id的行)。例如:查詢選擇組中的特定行

SELECT company_name, node_name, [text] 
FROM T_TBL_DATA 
GROUP BY company_name, node_name 
WHERE the selected [text] is from the row with the smallest row_id within each group 

任何想法?

+1

什麼ID節點或公司??????????? –

+0

@Royi Namir:row_id。我更新了這個問題。 – Naor

+0

@Naor只是一個想法,如果你的表的主鍵是公司ID或節點ID之一,邏輯上你會有一個序列。所以如果你可以採取最低限度,你會得到最好的查詢根據我 –

回答

1
select company_id, node_id, [text] 
from t_tbl_data 
where row_id in 
(
    select min(row_id) 
    from t_tbl_data 
    group by company_id, node_id 
) 
+0

我更新了問題。 – Naor

+0

@Naor仍然沒有足夠的信息,什麼決定了你的行的排列方式?什麼使得company_id/node_id組合在最上面? – 2011-11-01 16:01:35

+0

對於表中的每個company_name和node_name,我需要第一個創建的行的文本(我可以通過row_id列確定)。 – Naor

0

假設id是唯一的。 數據庫無關的解決方案在一定程度上:

select 
    company_id, node_id, (select txt from T_TBL_DATA t2 where t2.id = min(t1.id)) 
from T_TBL_DATA t1 
group by company_id, node_id 

對於MS SQL Server 2005和更高一點點簡單:

-- ============= 
-- sample data 
-- ============= 
declare @t table 
(
    id int, 
    company_id int, 
    node_id int, 
    txt varchar(50) 
) 

insert into @t values (1, 1, 1, 'abc1') 
insert into @t values (2, 1, 1, 'abc2') 
insert into @t values (3, 1, 2, 'abc3') 
insert into @t values (4, 1, 2, 'abc4') 
insert into @t values (5, 2, 1, 'abc5') 
insert into @t values (6, 2, 1, 'abc6') 
insert into @t values (7, 2, 2, 'abc7') 
insert into @t values (8, 2, 2, 'abc8') 

-- ============= 
-- solution 
-- ============= 
select 
    company_id, node_id, txt 
from 
(
    select 
     *, 
     id2 = min(id) over(partition by company_id, node_id) 
    from @t 
) t 
where id = id2