0

表から2行目だけを選びたい。ClientUserName列から。

SELECT
    ClientUserName, DestHost, count(DestHost) counts  
FROM 
    #ProxyLog_record  
WHERE
    ClientUserName = (Select top 1 ClientUserName from #ProxyLog_count_2)  
GROUP BY 
    ClientUserName, DestHost 
ORDER BY 
    counts DESC

(Select top 1 ClientUserName from #ProxyLog_count_2)ショーtop 1のみですが、そのテーブルから2番目のデータを取得する必要があります。これどうやってするの?

4

6 に答える 6

0

Wjyは、トップ2を選択して、結果セットからaecomd行を取得するだけではありませんか?

于 2012-06-27T16:16:20.697 に答える
0

これまでに試したことに基づいて...

SELECT top 1
    ClientUserName, DestHost, count(DestHost) counts  
FROM 
    #ProxyLog_record  
WHERE
    ClientUserName <> (Select top 1 ClientUserName from #ProxyLog_count_2)  
GROUP BY 
    ClientUserName, DestHost 
ORDER BY 
    counts DESC

ROW_NUMBER()を使用できます...

カーソルを使用できます...

一番上の行に識別子を入れて、それを除外できるようにすることができます(その後、一番上の1をもう一度選択すると、それが得られます)。

それ以外の場合、2行目について識別可能なものがある場合(最も高いもの、最も低いもの、または最新の日付など)、

于 2012-06-27T15:14:32.203 に答える
0

試す:

SELECT
    ClientUserName, DestHost, count(DestHost) counts  
FROM 
    #ProxyLog_record  
WHERE
    ClientUserName = (    
        ;with cte as 
        (
            select ROW_NUMBER() over (order by ClientUserName) as rn, * 
            from #ProxyLog_count_2
        ) 
        select ClientUserName from cte where rn=2    
    )
GROUP BY 
    ClientUserName, DestHost 
ORDER BY 
    counts DESC
于 2012-06-27T15:14:45.510 に答える
0

おそらく、SQL Server を使用していると思います。order by句がないため、「トップ1」はテーブルからランダムな行を選択しています。

2 番目の行をテーブルに挿入する場合、これを行う方法は、テーブルに自動インクリメント列を定義することです。create table ステートメントには次を含める必要があります。

create table #ProxyLog_count_2 (
    ProxyLog_Count_2_id int not null identity(1,1),
    ...
)

次に、単純な where 句を使用して挿入された 2 番目の行を取得できます。

where ProxyLog_Count_2_id = 2
于 2012-06-27T15:12:42.160 に答える
0

ROW_NUMBER()最も簡単な方法は、次のようにメソッドを使用することです。

WITH c AS (
SELECT
    ClientUserName, DestHost, count(DestHost) counts, ROW_NUMBER() OVER(ORDER BY count(DestHost)) AS rowNum
FROM 
    #ProxyLog_record  
GROUP BY 
    ClientUserName, DestHost 

)
SELECT ClientUserName, DestHost, counts
FROM c
WHERE rowNum = 2

(count(DestHost) counts必要でない場合は使用しないでください。または、別の CTE を使用して 2 回のカウントを節約してください)

于 2012-06-27T15:14:03.717 に答える
0
SELECT Top 1 a.ClientUserName, a.DestHost, a.counts
FROM
(
SELECT Top 2
    ClientUserName, DestHost, count(DestHost) counts  
FROM 
    #ProxyLog_record  
WHERE
    ClientUserName = (Select top 1 ClientUserName from #ProxyLog_count_2)  
GROUP BY 
    ClientUserName, DestHost 
ORDER BY 
    counts DESC
)
as a
ORDER BY a.Counts ASC
于 2013-12-06T05:48:05.093 に答える