12

テーブルに次のデータがあります。

URL         TIME    DATE
--------------------------------------
/x          11      2013-08-01
/x          11      2013-08-01
/pl/        11      2013-08-01
/pl/        11      2013-08-03
/pl/XXX/    11      2013-08-01
/pl/XXX/    11      2013-08-04
/pl/XXX/1   11      2013-08-01
/pl/XXX/2   11      2013-08-01
/pl/YYY/    11      2013-08-01
/pl/YYY/1   11      2013-08-01
/pl/YYY/2   11      2013-08-04
/pl/YYY/3   11      2013-08-04

/SQL Server で3 番目のスラッシュ () までの URL でグループ化する方法はありますか? 残念ながら、3 つ未満のレコードが存在します。

4

3 に答える 3

4

3 番目の文字までの部分文字列を取得できる単純な式'/'は次のとおりです。

case
    when patindex('%/%/%/%', url) = 0 then url
    else left(url,charindex('/',url,charindex('/',url,charindex('/',url)+1)+1))
end

patindex少なくとも 3 つのスラッシュがあることを確認します。これにより、3 番目の文字列までの部分文字列がleft抽出されます。

この式があれば、a を書くのgroup byは簡単です。

SELECT
    url3, max(tm), max(dt)
FROM (
    SELECT
        CASE
            WHEN patindex('%/%/%/%', url) = 0 THEN url
            ELSE left(url,charindex('/',url,charindex('/',url,charindex('/',url)+1)+1))
        END AS url3
    ,   tm
    ,   dt
    FROM test
) x
GROUP BY url3

SqlFiddle のデモ

于 2013-08-21T10:10:03.960 に答える