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 *










share|improve this question




















  • 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















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 *










share|improve this question




















  • 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













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 *










share|improve this question















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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














  • 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












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





share|improve this answer





















  • 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











Your Answer






StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");

StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});

function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});


}
});














draft saved

draft discarded


















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

























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





share|improve this answer





















  • 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















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





share|improve this answer





















  • 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













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





share|improve this answer












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






share|improve this answer












share|improve this answer



share|improve this answer










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


















  • 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


















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

A CLEAN and SIMPLE way to add appendices to Table of Contents and bookmarks

Calculate evaluation metrics using cross_val_predict sklearn

Insert data from modal to MySQL (multiple modal on website)