I have many horses and their values which reduce over time. I would like to be able to fetch only the rows where the value of each horse becomes 0 for the first time. There are multiple rows for each horse where the values are 0 but I want the earliest of them. My table looks like this and I need to return the rowID and the others if possible (8 and 20 in this example). I tried using the rank over partition but could not get that to work for me and I would paste the example but frankly it was rubbish. Thank you in advance.
rowID | horseID | valueYear | valueMonth | value | I need these rows |
---|---|---|---|---|---|
1 | 1 | 1990 | 7 | 1000 | |
2 | 1 | 1991 | 1 | 900 | |
3 | 1 | 1992 | 2 | 800 | |
4 | 1 | 1993 | 4 | 700 | |
5 | 1 | 1993 | 7 | 690 | |
6 | 1 | 1995 | 3 | 500 | |
7 | 1 | 1995 | 7 | 470 | |
8 | 1 | 1997 | 8 | 0 | <---- |
9 | 1 | 1998 | 2 | 0 | |
10 | 1 | 1999 | 3 | 0 | |
11 | 1 | 2000 | 9 | 0 | |
12 | 2 | 1990 | 3 | 900 | |
13 | 2 | 1991 | 1 | 750 | |
14 | 2 | 1992 | 7 | 700 | |
15 | 2 | 1993 | 3 | 600 | |
16 | 2 | 1993 | 4 | 590 | |
17 | 2 | 1995 | 3 | 300 | |
18 | 2 | 1995 | 9 | 170 | |
19 | 2 | 1997 | 5 | 50 | |
20 | 2 | 1998 | 6 | 0 | <---- |
21 | 2 | 1999 | 4 | 0 | |
22 | 2 | 2000 | 2 | 0 |
CodePudding user response:
One option is WITH TIES in concert with row_number()
Select top 1 with ties *
From YourTable
Where value = 0
Order By row_number() over (partition by horseID order by rowID ) -- could be valueYear as well