0

私は数時間返そうとしました.4行目は、明確なdoman_namnの数を教えてくれます. COUNT(DISTINCT doman_namn) を追加しようとし続けますが、グループ化が必要になり、目的が破壊されます。

これは、2 つのパラメーターを取るストアド プロシージャです。

@keyword[varchar](100),
@domannamn [varchar](100)

このような2つのテーブルを使用します

FIRST TABLE テーブル t_doman 列。doman_id ドメイン名

SECOND TABLE テーブル t_ranking 列; ranking_position ranking_date ranking_keyword ranking_id_doman

@keyword を使用して t_ranking テーブルの正しい行を検索し、次に doman_id のranking_id_doman に参加して「doman_name」を取得します。日付ごとに名前のセットがあり、名前が繰り返されます日付ごとに、個別の名前がいくつあるかを確認し、それを続けて返す必要があります。

次のように動作する必要があります。

Ranking position,   date,       name,  number of distinct name's
1___________________2012-11-11, tony,  3 
2___________________2012-11-11, chris, 3
3___________________2012-11-11, peter, 3
1___________________2012-11-10, tony,  3
2___________________2012-11-10, chris, 3
3___________________2012-11-10, peter, 3

 SELECT
 ranking_position,
 CONVERT(varchar(10),ranking_date, 120),
 doman_namn
 --Here's my my attempt COUNT(DISTINCT doman_namn) as 'number_of_discint_names'
 FROM 
     (SELECT 
      ranking_position,
      ranking_date,
      ranking_id_doman
      FROM dbo.t_ranking
      WHERE ranking_keyword = 'keyword'
      AND ranking_date BETWEEN DATEADD(day, -30, GETDATE()) AND GETDATE()
      AND ranking_id_doman IN (SELECT doman_id FROM dbo.t_doman WHERE doman_namn LIKE 'doman' + '%')) as tr
JOIN dbo.t_doman td on tr.ranking_id_doman = td.doman_id
--GROUP BY doman_namn ALSO IT DOES NOT WORK
ORDER BY ranking_date ASC
4

1 に答える 1

2
Declare
  @keyword nvarchar(20) = N'keyword',
  @domannamn nvarchar(20) = N'C'

Select
  r.ranking_position,
  r.ranking_date,
  d.doman_name,
  Count(r.ranking_id_doman) Over (Partition By r.ranking_date)
From
  dbo.t_ranking r
    inner join
  dbo.t_doman d
    on r.ranking_id_doman = d.doman_id
Where
  ranking_keyword = @keyword And
  ranking_date Between DateAdd(day, -30, GetDate()) And GetDate() And
  d.doman_name like @domannamn + '%'
Order By
  2, 1

http://sqlfiddle.com/#!3/ccf10/2

リチャードが指摘しているように、ランキング日付内に重複するranking_id_doman値があり、個別の値が必要な場合、これは機能しません。

于 2012-11-11T22:08:34.653 に答える