私はあなたがSQL Server 2012
またはそれ以降であると仮定しようとしています。
例データ:
次のコードは、私が質問に提示された例の状況を設定するために使用するものです。
create table #tmp_table (items char(1), date_entered_onto_system datetime)
insert into #tmp_table values ('P', '2016-11-08 12:01:00')
insert into #tmp_table values ('P', '2016-11-08 12:02:00')
insert into #tmp_table values ('P', '2016-11-08 12:03:00')
insert into #tmp_table values ('3', '2016-11-08 12:04:00')
insert into #tmp_table values ('3', '2016-11-08 12:05:00')
insert into #tmp_table values ('3', '2016-11-08 12:06:00')
insert into #tmp_table values ('3', '2016-11-08 12:07:00')
insert into #tmp_table values ('P', '2016-11-08 12:08:00')
insert into #tmp_table values ('P', '2016-11-08 12:09:00')
insert into #tmp_table values ('8', '2016-11-08 12:10:00')
insert into #tmp_table values ('8', '2016-11-08 12:11:00')
insert into #tmp_table values ('8', '2016-11-08 12:12:00')
insert into #tmp_table values ('P', '2016-11-08 12:13:00')
insert into #tmp_table values ('2', '2016-11-08 12:14:00')
insert into #tmp_table values ('P', '2016-11-08 12:15:00')
insert into #tmp_table values ('P', '2016-11-08 12:16:00')
insert into #tmp_table values ('P', '2016-11-08 12:17:00')
insert into #tmp_table values ('P', '2016-11-08 12:18:00')
insert into #tmp_table values ('P', '2016-11-08 12:19:00')
insert into #tmp_table values ('P', '2016-11-08 12:20:00')
回答:
このクエリはlag()
機能とSQL Server 2012
以降で利用可能ですover
節(下記リンク)を使用しています。このクエリは、行とその前の行との間のitems
の値を比較します(date_entered_onto_system
の値に従って時系列に並んでいます)。カウントする必要がある場合は1に、そうでない場合は0に評価し、次にsum
を値にします。
Lag Function
Over Clause
select b.items
, sum(b.sum_val) as items_cnt
from (
select a.items
, case when a.items = lag(a.items, 1, NULL) over (order by a.date_entered_onto_system asc) then 0 else 1 end as sum_val
from #tmp_table as a
) as b
group by b.items
結果:
これは、例えばデータの出力です。
items items_cnt
2 1
3 1
8 1
P 4
明確ではありません。単一のアイテムはどのように見えますか?なぜPで列を数えるだけではないのですか? –
質問を改善するためのヒントについては、[こちら](http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/)をお読みください。あなたが使った矛盾したタグの説明を読んでください。適切なソフトウェア(MySQL、Oracle、DB2など)とバージョンの両方でデータベースの質問にタグを付けると便利です。 'sql-server-2014'です。 – HABO
私は私がはっきりしていると思ったが、再読みするとどこが混乱するかが分かる。 "P、3、8、2"は個々の項目です - 私は数学的解を提示しないために整数と文字の混合を使用しました。つまり、「車、バス、バス、iPad、iPad、iPad、靴、車、車」のように簡単に「車、バス、iPad、靴」にすることができます。そして、私は "車、バス、iPad、靴、車"に減らしたいと考えています。 – MisterO