Hi folks,

I'm stumped on a SQL query.  Using SQL Server 7.0.

I have two tables - one with a lot of detail info, and one as a cross
reference.  The detail table (msgs) has a primary key (message_id) and
an e-mail address (emailAddress), plus other stuff that doesn't matter
for now.  The cross reference table (xref_forwards) has
originalMessage_ID and newMessage_ID.

When someone forwards an e-mail message to another person, the system
currently checks to see if the new address (the forward to address) is
present in the system.  If so, it inserts a record into the cross
reference table with the message_id of the sender, and the existing
message_id of the recipient.  If the new address is not present, it adds
a record for that address, grabs the new message_ID, and inserts a
record into the cross reference table.

Pretty straightforward stuff so far.

What's beating me up is writing a query that will return the original
sender's email address and the people that person forwarded the message
to, with a count of how many mails were forwarded per original email
address.  So far I have:

SELECT     a.originalMessage_ID, a.newMessage_ID, c.EMailAddress AS
SenderAddress, d.EMailAddress AS NewAddress, COUNT(a.originalMessage_ID)

                      AS totalforwards
FROM         xref_forwarding a INNER JOIN
                      xref_forwarding b ON a.originalMessage_ID =
b.newMessage_ID INNER JOIN
                      msgs c ON a.originalMessage_ID = c.Message_ID
INNER JOIN
                      msgs d ON a.newMessage_ID = d.Message_ID
GROUP BY a.originalMessage_ID, a.newMessage_ID, c.EMailAddress,
d.EMailAddress
ORDER BY a.originalMessage_ID

This seems to work fine.  Here's example output from the above query:
(in all the output, the domain names are changed so I don't get
screenscraped by spammers - the numbers all match up with the original
domains).

a.originalMessage_ID, a.newMessage_ID, c.EMailAddress AS SenderAddress,
d.EMailAddress AS NewAddress
 663352 663352 [EMAIL PROTECTED] [EMAIL PROTECTED]
 663352 670110 [EMAIL PROTECTED] [EMAIL PROTECTED]
 663352 671038 [EMAIL PROTECTED] [EMAIL PROTECTED]
 663352 714066 [EMAIL PROTECTED] [EMAIL PROTECTED]
 663352 714187 [EMAIL PROTECTED] [EMAIL PROTECTED]
 663353 670109 [EMAIL PROTECTED] [EMAIL PROTECTED]
 663353 670110 [EMAIL PROTECTED] [EMAIL PROTECTED]
 663353 714066 [EMAIL PROTECTED] [EMAIL PROTECTED]
 670110 714046 [EMAIL PROTECTED] [EMAIL PROTECTED]
 670110 714188 [EMAIL PROTECTED] [EMAIL PROTECTED]
 671038 663352 [EMAIL PROTECTED] [EMAIL PROTECTED]
 671038 663353 [EMAIL PROTECTED] [EMAIL PROTECTED]
 671038 714186 [EMAIL PROTECTED] [EMAIL PROTECTED]
 714066 671038 [EMAIL PROTECTED] [EMAIL PROTECTED]
 714066 714181 [EMAIL PROTECTED] [EMAIL PROTECTED]
 714066 714182 [EMAIL PROTECTED] [EMAIL PROTECTED]
 714066 714183 [EMAIL PROTECTED] [EMAIL PROTECTED]
 714066 714184 [EMAIL PROTECTED] [EMAIL PROTECTED]
 714066 714185 [EMAIL PROTECTED] [EMAIL PROTECTED]
 714188 671036 [EMAIL PROTECTED] [EMAIL PROTECTED]
 714188 671038 [EMAIL PROTECTED] [EMAIL PROTECTED]
 714188 714187 [EMAIL PROTECTED] [EMAIL PROTECTED]

The counts add up fine - I tested manually, writing down who sent mail
to whom.

When I add a count column the results are still the same, but the counts
are wrong:

SELECT     a.originalMessage_ID, a.newMessage_ID, c.EMailAddress AS
SenderAddress, d.EMailAddress AS NewAddress, COUNT(a.originalMessage_ID)

                      AS TotalForwards
FROM         xref_forwarding a INNER JOIN
                      xref_forwarding b ON a.originalMessage_ID =
b.newMessage_ID INNER JOIN
                      msgs c ON a.originalMessage_ID = c.Message_ID
INNER JOIN
                      msgs d ON a.newMessage_ID = d.Message_ID
GROUP BY a.originalMessage_ID, a.newMessage_ID, c.EMailAddress,
d.EMailAddress
ORDER BY a.originalMessage_ID

outputting:

a.originalMessage_ID, a.newMessage_ID, c.EMailAddress AS SenderAddress,
d.EMailAddress AS NewAddress, COUNT(a.originalMessage_ID) 
 663352 663352 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 663352 670110 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 663352 671038 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 663352 714066 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 663352 714187 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 663353 670109 [EMAIL PROTECTED] [EMAIL PROTECTED] 1
 663353 670110 [EMAIL PROTECTED] [EMAIL PROTECTED] 1
 663353 714066 [EMAIL PROTECTED] [EMAIL PROTECTED] 1
 670110 714046 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 670110 714188 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 671038 663352 [EMAIL PROTECTED] [EMAIL PROTECTED] 3
 671038 663353 [EMAIL PROTECTED] [EMAIL PROTECTED] 3
 671038 714186 [EMAIL PROTECTED] [EMAIL PROTECTED] 3
 714066 671038 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 714066 714181 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 714066 714182 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 714066 714183 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 714066 714184 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 714066 714185 [EMAIL PROTECTED] [EMAIL PROTECTED] 2
 714188 671036 [EMAIL PROTECTED] [EMAIL PROTECTED] 1
 714188 671038 [EMAIL PROTECTED] [EMAIL PROTECTED] 1
 714188 714187 [EMAIL PROTECTED] [EMAIL PROTECTED] 1

As you can see, the last three rows, the sender [EMAIL PROTECTED]
should count 3 forwards. I thought that by grouping on the original
message_id the counts would roll up as well.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Archives: http://www.houseoffusion.com/cf_lists/index.cfm?forumid=4
Subscription: 
http://www.houseoffusion.com/cf_lists/index.cfm?method=subscribe&forumid=4
FAQ: http://www.thenetprofits.co.uk/coldfusion/faq
Get the mailserver that powers this list at http://www.coolfusion.com

Reply via email to