我打算假設您在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()
功能和over
條款(下面的鏈接),它可在SQL Server 2012
及更高版本。此查詢比較行和其之前的行(根據date_entered_onto_system
值按時間順序排列)之間的值爲items
。如果它應該計數,則計算爲1,但如果不計算則計算爲0,然後它將這些值計算出來。
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計算行? –
請閱讀[this](http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/)瞭解一些關於改善問題的提示。並閱讀您使用的矛盾標籤的描述。使用適當的軟件(MySQL,Oracle,DB2,...)和版本(例如, '的SQL服務器2014'。 – HABO
我以爲我很清楚,但在重讀時我會看到哪裏可能會出現混亂。 「P,3,8,2」是個別項目 - 我使用了整數和字符的混合,以便不提出數學解決方案。它可以很容易地是「汽車,公共汽車,iPad,鞋子」,即隨着時間的推移輸入可能是「汽車,汽車,汽車,公共汽車,iPad,iPad,iPad,鞋子,汽車,汽車」。我想減少到「汽車,公共汽車,iPad,鞋子,汽車」,然後計算汽車的實例 – MisterO