Reputation: 41
Table(browser)
+-------+-------------+----------------+--------+
| Users | Application | Name | Value |
+-------+-------------+----------------+--------+
| A1 | AA | browsername | IE |
| A1 | AA | browserVersion | 11 |
| A1 | AA | browsername | chrome |
| A1 | AA | browserVersion | 60 |
| A1 | AA | browsername | safari |
| A1 | AA | browserVersion | 11 |
| A2 | AA | browsername | IE |
| A2 | AA | browserVersion | 10 |
| A2 | AA | browsername | safari |
| A2 | AA | browserVersion | 10 |
| A3 | AA | browsername | IE |
| A3 | AA | browserVersion | 9 |
| A3 | AA | browsername | chrome |
| A3 | AA | browserVersion | 60 |
| A4 | AA | browsername | safari |
| A4 | AA | browserVersion | 11 |
| A4 | AA | browsername | IE |
| A4 | AA | browserVersion | 10 |
+-------+-------------+----------------+--------+
The user can use the application via any browser. I want to look into the users who used IE browser with 11 version. I'm not able to pick it up as both safari and IE has same versions. Can someone please suggest me how to get the data I require.
Upvotes: 0
Views: 77
Reputation: 1884
First, to make it easier, create a column "position" and make sure they are numbered as they were inserted, like this :
+-------+-------+-------------+----------------+--------+
| pos | Users | Application | Name | Value |
+-------+-------+-------------+----------------+--------+
| 1 | A1 | AA | browsername | IE |
| 2 | A1 | AA | browserVersion | 11 |
| 3 | A1 | AA | browsername | chrome |
| 4 | A1 | AA | browserVersion | 60 |
| 5 | A1 | AA | browsername | safari |
| 6 | A1 | AA | browserVersion | 11 |
| 7 | A2 | AA | browsername | IE |
| 8 | A2 | AA | browserVersion | 10 |
| 9 | A2 | AA | browsername | safari |
| 10 | A2 | AA | browserVersion | 10 |
| 11 | A3 | AA | browsername | IE |
| 12 | A3 | AA | browserVersion | 9 |
| 13 | A3 | AA | browsername | chrome |
| 14 | A3 | AA | browserVersion | 60 |
| 15 | A1 | AA | browsername | safari |
| 16 | A1 | AA | browserVersion | 11 |
| 17 | A1 | AA | browsername | IE |
| 18 | A1 | AA | browserVersion | 10 |
+-------+-------+-------------+----------------+--------+
Now, you can use the CTE and lead function to obtain what you want.
;with X as (
select users, application, name, value as Browser, lead (value) over (order by pos) as Version
from table
where name = 'browsername'
)
select *
from X
where browser = 'IE' and version = '11'
PS: always create an identity column, it always pays off in the long run
Upvotes: 0
Reputation: 1270713
You can use conditional aggregation:
select user, application
from t
where name in ('browsername', 'browserVersion')
group by user, application
having sum(case when name = 'browsername' and value = 'IE' then 1 else 0 end) > 0 and
sum(case when name = 'browserVersion' and value = '11' then 1 else 0 end) > 0 ;
Upvotes: 2