1

私はMSSQL2005クエリを作成するための最良の方法を過小評価しようとしてきましたが、これはほとんど次のことを行います...

select distinct col1, col2, col3
from table1

基本的に、col1でDistinctを実行したいのですが、Col2 / 3でDististincは必要ありません。ただ、そこに値が必要です。

Distinctが行に適用され、列には適用されないことを読んだので、この方法でクエリを記述できないことを理解していますか?

誰かが私を正しい方向に向けてくれませんか?値を正しく結合しようとしましたが、個別の選択で追加の結合された列を指定する必要があったため、これは機能しませんでした。

select distinct t1.col1, t2.col2, t3.col3
from table1 t1
right join (select col1, col2, col3 from table1) t2
on t1.col1 = t2.col1

よりよく説明するために編集されました。

select distinct t1.Hostname, t2.IP, t2.ActionDateTime, t2.Action
from tblUserActions t1
right join (select Hostname, IP, ActionDateTime from tblUserActions) t2
on t1.Hostname = t2.Hostname

基本的に、このテーブルは何千ものユーザーアクションのリストであり、ホスト名に個別にリストしようとしているので、ホスト名がいくつあるかというと、たとえば10行だけを受け取る必要があります。次に、これらのホスト名に基づいて、返された行に最新のレコードデータも結合したいので、次のように返します。

  Hostname, IP, ActionDateTime, Action
1 Host1, 165.123.123.1, 2012-06-14 02:07:08, Logon
2 Host2, 165.123.123.2, 2012-06-14 03:07:08, Logoff
3 Host3, 165.123.123.3, 2012-06-14 04:07:08, Logon
4 Host4, 165.123.123.4, 2012-06-14 05:07:08, Logoff
etc...

どんなヘルプ/ポインタも素晴らしいでしょう!乾杯。

4

2 に答える 2

1

それの音によって、私はこれがあなたが求めているものだと思います:

WITH CTE AS
(   SELECT  HostName,
            IP,
            ActionDate,
            Action,
            ROW_NUMBER() OVER(PARTITION BY HostName ORDER BY ActionDate DESC) AS RowNumber
    FROM    Table
)
SELECT  HostName,
        IP,
        ActionDate,
        Action
FROM    CTE
WHERE   RowNumber = 1

これにより、ホスト名の一意の値のみが返され、他の列に返される値は、 Windowed関数のORDER BY句に基づいています。ROW_NUMBER()

正確な要件に合わせてを変更する必要があるかもしれませんがORDER BY、おそらく最新のアクションが最も可能性が高いと思いました。

于 2012-06-14T11:09:51.783 に答える
1

ホスト名/IPごとに最新のアクションが必要ですか?

あなたはこのようなことをすることができます:

with latestAction as (
select  hostname,
        ip,
        max(ActionDate) as latestActionDate
from    tblUserActions
group by hostname,
        ip)
select  la.hostName,
    la.ip,
    tua.ActionDate,
    tua.Action
from    tblUserActions tua join latestAction la on
        tua.hostname = la.hostname and
        tua.ip = la.ip and
        tua.ActionDate = la.latestActionDate
于 2012-06-14T11:16:54.923 に答える