Afternoon Mike,

Thanks for this info mate, sorry it's taken me a while to get back, I've been 
busy on other stuff. I've set down this morning and played around with this but 
I'm struggling a little bit with it. I've implemented it into one of my 
queries, but it just makes the query return 0 results.

The problem lies in this multiple record stuff, as I DO have more than record 
per hour, sometimes a couple of hundred but they are grouped into hours in the 
query, so they effectively display as a single row using counts to get summed 
values.

Take a look at the query (with your outer join on it), Perhaps seeing the code 
will help a little. I'm running MS SQL Server opposed to the MySQL that I think 
you use in your example, but hopefully the principles are very similar.

SELECT  Hour.HourOfDay,
        DATEPART(month, MacLog.DateTime) AS myMonth,
        DATEPART(day, MacLog.Datetime) AS myDay,
        DATEPART(year, MacLog.DateTime) AS myYear,
        DATEPART(hour, MacLog.DateTime) AS myHour,
        SUM(CASE WHEN MacLog.LogClass_ID = 1 THEN 1 ELSE 0 END) AS Success,
        SUM(CASE WHEN MacLog.LogClass_ID = 2 THEN 1 ELSE 0 END) AS Failed,
        SUM(CASE WHEN MacLog.LogClass_ID = 3 THEN 1 ELSE 0 END) AS NoAction,
        COUNT(DISTINCT MacLog.MacAddress_ID) AS UniqueDevices
FROM    Hour
LEFT OUTER JOIN MacLog ON Hour.HourOfDay = DATEPART(hour, MacLog.DateTime)
WHERE   MacLog.DateTime BETWEEN <cfqueryparam value="#ARGUMENTS.StartDate#" 
cfsqltype="cf_sql_timestamp" /> AND <cfqueryparam value="#ARGUMENTS.EndDate#" 
cfsqltype="cf_sql_timestamp" />
AND             MacLog.ThinkTank_ID = <cfqueryparam 
value="#ARGUMENTS.ThinkTankID#" cfsqltype="cf_sql_integer" maxlength="4" />
GROUP BY        DATEPART(month, dateTime),
                DATEPART(day, datetime),
                DATEPART(year, dateTime),
                DATEPART(hour, MacLog.DateTime),
                Hour.HourOfDay

Thanks pal,

Rob

-----Original Message-----
From: Dawson, Michael [mailto:[EMAIL PROTECTED] 
Sent: 04 May 2007 16:06
To: CF-Talk
Subject: RE: Table Data

Create a very simple table called "Hours" with an integer column named
"HourOfDay".

Then, insert 24 records such as:

HourOfDay
---------
1
2
3
4
5
6
7
.....
23
24

(You may need to use 0-23 instead of 1-24.)

Then, OUTER JOIN the tables such as:

SELECT
  Hours.HourOfDay, Articles.ArticleText
FROM
  Hours
LEFT OUTER JOIN
  Articles ON Hours.HourOfDay = HOUR(Articles.ArticleDate)
WHERE
  Articles.ArticleDate = #cf_date_goes_here#
ORDER BY
  Hours.HourOfDay

You will always get all 24 records from the Hours table and any matching
records from the article table, as long as you ONLY have one article per
hour.

The Hours table will "fill up" any gaps, however, it won't prevent any
extra records.  For example, if there were two articles posted between
9-10, then you would get 25 records.

M!ke

-----Original Message-----
From: Robert Rawlins - Think Blue
[mailto:[EMAIL PROTECTED] 
Sent: Friday, May 04, 2007 9:28 AM
To: CF-Talk
Subject: RE: Table Data

Thanks Michael,

That first solution sounds like a nice idea, would you be able to
elaborate a little more? I'd much rather have my SQLServer do the work
for me.

Thanks,

Rob



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
ColdFusion MX7 and Flex 2 
Build sales & marketing dashboard RIA’s for your business. Upgrade now
http://www.adobe.com/products/coldfusion/flex2?sdid=RVJT

Archive: 
http://www.houseoffusion.com/groups/CF-Talk/message.cfm/messageid:277134
Subscription: http://www.houseoffusion.com/groups/CF-Talk/subscribe.cfm
Unsubscribe: http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=89.70.4

Reply via email to