2017-07-08 1 views
0

私はこのようなテーブルがあります:私は(彼が現場に来るとき、最初のページのユーザーを参照)ほとんどのユーザーのための最初でどのページを把握し、それがある回数をカウントしたいSQL - ユーザーのためにどのページが最初に見つかるか

+----------+-------------------------------------+----------------------------------+ 
| user_id | time        | url        | 
+----------+-------------------------------------+----------------------------------+ 
| 1  | 02.04.2017 8:56      | www.landingpage.com/    | 
| 1  | 02.04.2017 8:57      | www.landingpage.com/about-us  | 
| 1  | 02.04.2017 8:58      | www.landingpage.com/faq   | 
| 2  | 02.04.2017 6:34      | www.landingpage.com/about-us  | 
| 2  | 02.04.2017 6:35      | www.landingpage.com/how-to-order | 
| 3  | 03.04.2017 9:11      | www.landingpage.com/    | 
| 3  | 03.04.2017 9:12      | www.landingpage.com/contact  | 
| 3  | 03.04.2017 9:13      | www.landingpage.com/about-us  | 
| 3  | 03.04.2017 9:14      | www.landingpage.com/our-legacy | 
| 3  | 03.04.2017 9:15      | www.landingpage.com/    | 
+----------+-------------------------------------+----------------------------------+ 

を最初のページと見なされます。

これを行うためのクエリを書く方法はありますか?私は使用する必要があると思います。

MIN(time) 

をグループ化と組み合わせて使用​​していますが、わかりません。

url          url_count 
--------------------------------------------------- 
www.landingpage.com/      2    
www.landingpage.com/about-us    1    

ありがとう:だから私は提供されたサンプルについて

それは次のようにする必要があります!

答えて

0

正しいですが、副選択内でmin()集約関数を使用する必要があります。

select 
    my_table.url 
from 
    my_table 
where 
    my_table.time = (
    select 
     min(t.time) 
    from 
     my_table t 
    where 
     t.user_id = my_table.user_id 
) 

my_tableは実際にテーブルの名前を付けてください。


ユーザーが見てきたどのように多くのページを含めるには、あなたがこのような何か必要があります:あなたは以下のように問い合わせることができます

select 
    my_table.url 
    , (
    select 
     count(t.url) 
    from 
     my_table t 
    where 
     t.user_id = my_table.user_id 
) as url_count 
from 
    my_table 
where 
    my_table.time = (
    select 
     min(t.time) 
    from 
     my_table t 
    where 
     t.user_id = my_table.user_id 
) 
+0

ありがとうございました! =、 ' my_table.urlを選択 MY_TABLE どこ my_table.timeから(my_table.url) を数える:私は右のそれを取得する場合、私はグループのURLを追加する必要があるURLをカウントするためにそのコードは次のようになります( 分(t.time) からMY_TABLE T ここt.user_id = my_table.user_id 選択)一番上の行は、そのURLが表示されmy_table.urlのDESCによってmy_table.url ため ' によって基ほとんどのユーザーにとって最初であり、ビューの総数です。あれは正しいですか? – monsieurkovacs

+0

@ monsieurkovacs:残念ながら、いいえ。 where節は、それを最小限の行に制限します。カウントを含める場合は、select句にsub selectを追加する必要があります。 – Jacobm001

+0

@ monsieurkovacs:ユーザーカウントを含めるように質問を編集しました。助けとなった回答をupvoteして、どちらが最も役に立つかを覚えておいてください:) – Jacobm001

0
SELECT * 
FROM my_table 
WHERE time IN 
(
    SELECT min(time) 
    FROM my_table 
    GROUP BY url 
); 
+0

同じmin [時間]レコードのレコードが2つあるとどうなりますか? –

+0

質問をした人は「私はMIN(時間)を使う必要がある」と言った。その答えは、人の願いに基づいて書かれました。あなたの条件では、時間値は秒またはミリ秒の値を含まなければなりません。私は時間が同じURL上の異なるユーザーのために同じであってはならないということです。 –

0

を:

Select top (1) with ties * 
    from yourtable 
order by row_number() over(partition by user_id order by [time]) 

あなたはすることができます以下のように外部クエリを使用します。

Select * from (
    Select *, RowN = row_number() over(partition by user_id order by [time]) from yourtable) a 
Where a.RowN = 1 
関連する問題