How to aggregate over two columns with duplicates in both, and then some?
up vote
0
down vote
favorite
This is probably very simple but I'm stupid and stuck and failed to find a thread that quite matched my problem...
I need to do an insert from a table, say tblGameRecords
, that looks something like this:
tblGameRecords(ID:match_no, soccer_team_id, stadium, fake_injuries, hair_wax, date)
...into another table, tblTeamRecords
, that needs to look like this:
tblTeamRecords(ID:soccer_team_id, stadium, fake_injuries, hair_wax, date)
Now, my problem is that in tblGameRecords
:
1. There are natural multiple occurrences of the same soccer_team_id
's.
2. There are natural multiple occurrences of the same date
.
3. There are sometimes multiple occurrences of the same soccer_team_id
on the same date
(sigh...)
I want to insert into tblTeamRecord
one row per soccer_team_id
. I want the earliest record of that team from tblGameRecords
.
If the team makes its entrée in tblGameRecords
as a duplicate, several times on the same date
, I'm fine with any one row of those, because the other columns need to be filled with the respective values from that row, regardless of the actual values which may or may not differ from the other duplicates.
And I'm obviously having trouble formulating a query that lets me narrow down these multiples to just one. This is part of a stored procedure btw.
* EDIT again: Deleted the redundant additional info *
sql-server
add a comment |
up vote
0
down vote
favorite
This is probably very simple but I'm stupid and stuck and failed to find a thread that quite matched my problem...
I need to do an insert from a table, say tblGameRecords
, that looks something like this:
tblGameRecords(ID:match_no, soccer_team_id, stadium, fake_injuries, hair_wax, date)
...into another table, tblTeamRecords
, that needs to look like this:
tblTeamRecords(ID:soccer_team_id, stadium, fake_injuries, hair_wax, date)
Now, my problem is that in tblGameRecords
:
1. There are natural multiple occurrences of the same soccer_team_id
's.
2. There are natural multiple occurrences of the same date
.
3. There are sometimes multiple occurrences of the same soccer_team_id
on the same date
(sigh...)
I want to insert into tblTeamRecord
one row per soccer_team_id
. I want the earliest record of that team from tblGameRecords
.
If the team makes its entrée in tblGameRecords
as a duplicate, several times on the same date
, I'm fine with any one row of those, because the other columns need to be filled with the respective values from that row, regardless of the actual values which may or may not differ from the other duplicates.
And I'm obviously having trouble formulating a query that lets me narrow down these multiples to just one. This is part of a stored procedure btw.
* EDIT again: Deleted the redundant additional info *
sql-server
1
Can you post data sample? This will help us to write the proper query.
– DanB
Nov 21 at 17:39
I can't post a sample for various reasons unfortunately, but I will provide better info on the actual data types and values in a reply to myself below.
– n00bd00d
Nov 22 at 13:10
add a comment |
up vote
0
down vote
favorite
up vote
0
down vote
favorite
This is probably very simple but I'm stupid and stuck and failed to find a thread that quite matched my problem...
I need to do an insert from a table, say tblGameRecords
, that looks something like this:
tblGameRecords(ID:match_no, soccer_team_id, stadium, fake_injuries, hair_wax, date)
...into another table, tblTeamRecords
, that needs to look like this:
tblTeamRecords(ID:soccer_team_id, stadium, fake_injuries, hair_wax, date)
Now, my problem is that in tblGameRecords
:
1. There are natural multiple occurrences of the same soccer_team_id
's.
2. There are natural multiple occurrences of the same date
.
3. There are sometimes multiple occurrences of the same soccer_team_id
on the same date
(sigh...)
I want to insert into tblTeamRecord
one row per soccer_team_id
. I want the earliest record of that team from tblGameRecords
.
If the team makes its entrée in tblGameRecords
as a duplicate, several times on the same date
, I'm fine with any one row of those, because the other columns need to be filled with the respective values from that row, regardless of the actual values which may or may not differ from the other duplicates.
And I'm obviously having trouble formulating a query that lets me narrow down these multiples to just one. This is part of a stored procedure btw.
* EDIT again: Deleted the redundant additional info *
sql-server
This is probably very simple but I'm stupid and stuck and failed to find a thread that quite matched my problem...
I need to do an insert from a table, say tblGameRecords
, that looks something like this:
tblGameRecords(ID:match_no, soccer_team_id, stadium, fake_injuries, hair_wax, date)
...into another table, tblTeamRecords
, that needs to look like this:
tblTeamRecords(ID:soccer_team_id, stadium, fake_injuries, hair_wax, date)
Now, my problem is that in tblGameRecords
:
1. There are natural multiple occurrences of the same soccer_team_id
's.
2. There are natural multiple occurrences of the same date
.
3. There are sometimes multiple occurrences of the same soccer_team_id
on the same date
(sigh...)
I want to insert into tblTeamRecord
one row per soccer_team_id
. I want the earliest record of that team from tblGameRecords
.
If the team makes its entrée in tblGameRecords
as a duplicate, several times on the same date
, I'm fine with any one row of those, because the other columns need to be filled with the respective values from that row, regardless of the actual values which may or may not differ from the other duplicates.
And I'm obviously having trouble formulating a query that lets me narrow down these multiples to just one. This is part of a stored procedure btw.
* EDIT again: Deleted the redundant additional info *
sql-server
sql-server
edited Nov 23 at 8:06
asked Nov 21 at 17:29
n00bd00d
32
32
1
Can you post data sample? This will help us to write the proper query.
– DanB
Nov 21 at 17:39
I can't post a sample for various reasons unfortunately, but I will provide better info on the actual data types and values in a reply to myself below.
– n00bd00d
Nov 22 at 13:10
add a comment |
1
Can you post data sample? This will help us to write the proper query.
– DanB
Nov 21 at 17:39
I can't post a sample for various reasons unfortunately, but I will provide better info on the actual data types and values in a reply to myself below.
– n00bd00d
Nov 22 at 13:10
1
1
Can you post data sample? This will help us to write the proper query.
– DanB
Nov 21 at 17:39
Can you post data sample? This will help us to write the proper query.
– DanB
Nov 21 at 17:39
I can't post a sample for various reasons unfortunately, but I will provide better info on the actual data types and values in a reply to myself below.
– n00bd00d
Nov 22 at 13:10
I can't post a sample for various reasons unfortunately, but I will provide better info on the actual data types and values in a reply to myself below.
– n00bd00d
Nov 22 at 13:10
add a comment |
1 Answer
1
active
oldest
votes
up vote
1
down vote
accepted
You can use ROW_NUMBER to generate row numbers per date for each value of soccer_team_id (to partition the numbering by it) and then insert only those rows, where row number equals one:
;with cte as (
select soccer_team_id, stadium, fake_injuries, hair_wax, date, row_number() over(partition by soccer_team_id order by date) as row_no
from tblGameRecords
)
insert into tblTeamRecords(soccer_team_id, stadium, fake_injuries, hair_wax, date)
select soccer_team_id, stadium, fake_injuries, hair_wax, date
from cte
where row_no = 1
row_number() is a really nice trick to add to my rather small tool box. I had it set up similarly but was experimenting in vain with ROWS within the PARTITION parenthesis, which doesn't result in single value results and so doesn't work (you knew that). Unfortunately your solution doesn't work still. It only returns about a third of the 'soccer_team_id's' in 'tblGameRecords'. I'll post a reply to my question with more details about the actual data.
– n00bd00d
Nov 22 at 13:06
Sorry, my bad. I checked the validity of the query on a single date against a select distinct from the source table, but must have been tired and made a mistake writing the condition. Yours IS the solution. Thank you Andrey Nikolov! Huge help for me.
– n00bd00d
Nov 23 at 8:09
@n00bd00d, remember to tick his answer as the actual answer...
– Birel
Nov 23 at 8:13
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
1
down vote
accepted
You can use ROW_NUMBER to generate row numbers per date for each value of soccer_team_id (to partition the numbering by it) and then insert only those rows, where row number equals one:
;with cte as (
select soccer_team_id, stadium, fake_injuries, hair_wax, date, row_number() over(partition by soccer_team_id order by date) as row_no
from tblGameRecords
)
insert into tblTeamRecords(soccer_team_id, stadium, fake_injuries, hair_wax, date)
select soccer_team_id, stadium, fake_injuries, hair_wax, date
from cte
where row_no = 1
row_number() is a really nice trick to add to my rather small tool box. I had it set up similarly but was experimenting in vain with ROWS within the PARTITION parenthesis, which doesn't result in single value results and so doesn't work (you knew that). Unfortunately your solution doesn't work still. It only returns about a third of the 'soccer_team_id's' in 'tblGameRecords'. I'll post a reply to my question with more details about the actual data.
– n00bd00d
Nov 22 at 13:06
Sorry, my bad. I checked the validity of the query on a single date against a select distinct from the source table, but must have been tired and made a mistake writing the condition. Yours IS the solution. Thank you Andrey Nikolov! Huge help for me.
– n00bd00d
Nov 23 at 8:09
@n00bd00d, remember to tick his answer as the actual answer...
– Birel
Nov 23 at 8:13
add a comment |
up vote
1
down vote
accepted
You can use ROW_NUMBER to generate row numbers per date for each value of soccer_team_id (to partition the numbering by it) and then insert only those rows, where row number equals one:
;with cte as (
select soccer_team_id, stadium, fake_injuries, hair_wax, date, row_number() over(partition by soccer_team_id order by date) as row_no
from tblGameRecords
)
insert into tblTeamRecords(soccer_team_id, stadium, fake_injuries, hair_wax, date)
select soccer_team_id, stadium, fake_injuries, hair_wax, date
from cte
where row_no = 1
row_number() is a really nice trick to add to my rather small tool box. I had it set up similarly but was experimenting in vain with ROWS within the PARTITION parenthesis, which doesn't result in single value results and so doesn't work (you knew that). Unfortunately your solution doesn't work still. It only returns about a third of the 'soccer_team_id's' in 'tblGameRecords'. I'll post a reply to my question with more details about the actual data.
– n00bd00d
Nov 22 at 13:06
Sorry, my bad. I checked the validity of the query on a single date against a select distinct from the source table, but must have been tired and made a mistake writing the condition. Yours IS the solution. Thank you Andrey Nikolov! Huge help for me.
– n00bd00d
Nov 23 at 8:09
@n00bd00d, remember to tick his answer as the actual answer...
– Birel
Nov 23 at 8:13
add a comment |
up vote
1
down vote
accepted
up vote
1
down vote
accepted
You can use ROW_NUMBER to generate row numbers per date for each value of soccer_team_id (to partition the numbering by it) and then insert only those rows, where row number equals one:
;with cte as (
select soccer_team_id, stadium, fake_injuries, hair_wax, date, row_number() over(partition by soccer_team_id order by date) as row_no
from tblGameRecords
)
insert into tblTeamRecords(soccer_team_id, stadium, fake_injuries, hair_wax, date)
select soccer_team_id, stadium, fake_injuries, hair_wax, date
from cte
where row_no = 1
You can use ROW_NUMBER to generate row numbers per date for each value of soccer_team_id (to partition the numbering by it) and then insert only those rows, where row number equals one:
;with cte as (
select soccer_team_id, stadium, fake_injuries, hair_wax, date, row_number() over(partition by soccer_team_id order by date) as row_no
from tblGameRecords
)
insert into tblTeamRecords(soccer_team_id, stadium, fake_injuries, hair_wax, date)
select soccer_team_id, stadium, fake_injuries, hair_wax, date
from cte
where row_no = 1
answered Nov 21 at 17:48
Andrey Nikolov
1,9081311
1,9081311
row_number() is a really nice trick to add to my rather small tool box. I had it set up similarly but was experimenting in vain with ROWS within the PARTITION parenthesis, which doesn't result in single value results and so doesn't work (you knew that). Unfortunately your solution doesn't work still. It only returns about a third of the 'soccer_team_id's' in 'tblGameRecords'. I'll post a reply to my question with more details about the actual data.
– n00bd00d
Nov 22 at 13:06
Sorry, my bad. I checked the validity of the query on a single date against a select distinct from the source table, but must have been tired and made a mistake writing the condition. Yours IS the solution. Thank you Andrey Nikolov! Huge help for me.
– n00bd00d
Nov 23 at 8:09
@n00bd00d, remember to tick his answer as the actual answer...
– Birel
Nov 23 at 8:13
add a comment |
row_number() is a really nice trick to add to my rather small tool box. I had it set up similarly but was experimenting in vain with ROWS within the PARTITION parenthesis, which doesn't result in single value results and so doesn't work (you knew that). Unfortunately your solution doesn't work still. It only returns about a third of the 'soccer_team_id's' in 'tblGameRecords'. I'll post a reply to my question with more details about the actual data.
– n00bd00d
Nov 22 at 13:06
Sorry, my bad. I checked the validity of the query on a single date against a select distinct from the source table, but must have been tired and made a mistake writing the condition. Yours IS the solution. Thank you Andrey Nikolov! Huge help for me.
– n00bd00d
Nov 23 at 8:09
@n00bd00d, remember to tick his answer as the actual answer...
– Birel
Nov 23 at 8:13
row_number() is a really nice trick to add to my rather small tool box. I had it set up similarly but was experimenting in vain with ROWS within the PARTITION parenthesis, which doesn't result in single value results and so doesn't work (you knew that). Unfortunately your solution doesn't work still. It only returns about a third of the 'soccer_team_id's' in 'tblGameRecords'. I'll post a reply to my question with more details about the actual data.
– n00bd00d
Nov 22 at 13:06
row_number() is a really nice trick to add to my rather small tool box. I had it set up similarly but was experimenting in vain with ROWS within the PARTITION parenthesis, which doesn't result in single value results and so doesn't work (you knew that). Unfortunately your solution doesn't work still. It only returns about a third of the 'soccer_team_id's' in 'tblGameRecords'. I'll post a reply to my question with more details about the actual data.
– n00bd00d
Nov 22 at 13:06
Sorry, my bad. I checked the validity of the query on a single date against a select distinct from the source table, but must have been tired and made a mistake writing the condition. Yours IS the solution. Thank you Andrey Nikolov! Huge help for me.
– n00bd00d
Nov 23 at 8:09
Sorry, my bad. I checked the validity of the query on a single date against a select distinct from the source table, but must have been tired and made a mistake writing the condition. Yours IS the solution. Thank you Andrey Nikolov! Huge help for me.
– n00bd00d
Nov 23 at 8:09
@n00bd00d, remember to tick his answer as the actual answer...
– Birel
Nov 23 at 8:13
@n00bd00d, remember to tick his answer as the actual answer...
– Birel
Nov 23 at 8:13
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53417624%2fhow-to-aggregate-over-two-columns-with-duplicates-in-both-and-then-some%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
Can you post data sample? This will help us to write the proper query.
– DanB
Nov 21 at 17:39
I can't post a sample for various reasons unfortunately, but I will provide better info on the actual data types and values in a reply to myself below.
– n00bd00d
Nov 22 at 13:10