Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- id doc_id datetime user event
- ---|------|------------|--------|--------
- 1 | 10 | 04/03/2018 | john | sign
- 2 | 10 | 05/03/2018 | anna | sign
- 3 | 10 | 11/03/2018 | paul | reject
- 4 | 10 | 23/03/2018 | marc | sign
- 5 | 11 | 23/03/2018 | john | sign
- user num_of_signed_docs
- -----|-------------------|
- john | 1 |
- anna | 0 |
- paul | 0 |
- marc | 1 |
- select user, sum(case when event = 'sign' then 1 else 0 end) as num_signs
- from audittable
- group by user;
- SELECT user, COUNT(event = 'sign') AS `num_of_signed_docs`
- FROM audittable
- WHERE `id` > (SELECT `id` FROM audittable
- WHERE `event` = 'reject'
- ORDER BY `id` DESC LIMIT 1)
- GROUP BY user;
- select t.username, sum(t.type) num_of_signed_docs from (
- select a.username,
- case
- when event = 'reject' then 0
- when exists
- (select 1 from audit where doc_id = a.doc_id and
- datetime > a.datetime and event = 'reject')
- then 0
- else 1 end as type
- from audit a
- ) t
- group by t.username
- Create Table signed
- (
- id Int,
- doc_id Int,
- dt Datetime,
- usr VarChar(25),
- event VarChar(25)
- )
- Insert Into signed Values
- (1,10,'2018/03/04','john','sign'),
- (2,10,'2018/03/05','anna','sign'),
- (3,10,'2018/03/11','paul','reject'),
- (4,10,'2018/03/23','marc','sign'),
- (5,11,'2018/03/23','john','sign')
- With cte1 As
- (
- Select id,usr From signed
- ), cte2 As
- (
- Select id as rid,usr, count(*) As numb From signed
- Where dt >
- (
- Select Top 1 dt From signed Where event = 'reject'
- )
- Group by id,usr
- )
- Select min(id) As mid,cte1.usr,Max(isnull(numb,0)) As num_signed_docs
- From cte1 Left Join
- cte2 On cte1.usr = cte2.usr
- Group by cte1.usr
- Order by mid
- mid usr num_signed_docs
- 1 john 1
- 2 anna 0
- 3 paul 0
- 4 marc 1
Add Comment
Please, Sign In to add comment