随时间跨度显示CFQuery结果

时间:2014-12-19 18:28:31

标签: coldfusion coldfusion-9 cfml

我能够在1小时的时间内获得查询 - 以15分钟为增量...

我只是试图在主键相同时停止显示重复结果。

ie:如果某事在早上6:45开始 - 并在上午8:00结束 - 我只希望它在主键(masterid)相同时跨越DIV一次。然后,如果其他东西是在早上8点使用不同的主键 - 跨越该时间帧等...

我正在考虑使用cfloop等 - 检查掌握的是相同还是不同/

关于如何做到这一点的想法......

查询代码工作正常 - 就像我的显示代码一样...包含图片以了解我想要做的事情。

Output

    <cfloop index="incr" from="0" to="#loopreps#">
    <cfoutput>

    Loopreps is thru the time spans of 15 mins...

     <cfquery name="scht" datasource="#ds#">
 Proper Query
 </cfquery>

    <cfif scht.recordcount is not 0>
    <cfset mid = #scht.masterid#>
    This is where I am lost to hold it to only 1 result when spanning time


    Proper Display Across Div Height Span once if MasterID is same

    </cfif>

   </cfoutput>
   </cfloop>

3 个答案:

答案 0 :(得分:3)

如评论中所述,作为桌面数据库,MS Access相当有限。 SQL Server等企业数据库为此类任务提供了更强大的功能,例如using CTE's

但是,只是提供另一个视角,您也可以使用辅助时间表。 (在CTE出现之前,这是SQL Server中的常用方法)。您可以使用Mark's loop作为基础,在00:0023:45之间以十五分钟的增量轻松填充表格。然后只需在预定的开始和结束时间加入该表。 (Access需要额外的括号和派生表)。

SELECT ti.IntervalTime
        , s.StartTime
        , s.EndTime
        , s.AppointmentName
FROM  TimeInterval ti LEFT JOIN 
        (
            SELECT AppointmentName, StartTime, EndTime
            FROM   ScheduleTable 
            WHERE  ScheduleDate = <cfqueryparam value="#someDate#" cfsqltype="cf_sql_timestamp">    
        ) s
        ON ( 
             ti.IntervalTime >= s.StartTime AND 
             ti.IntervalTime <= s.EndTime 
        )
WHERE ti.IntervalTime >= <cfqueryparam value="#fromTime#" cfsqltype="cf_sql_timestamp">
AND   ti.IntervalTime <= <cfqueryparam value="#toTime#" cfsqltype="cf_sql_timestamp">
ORDER BY ti.IntervalTime 

结果将包含一个查询中的所有间隔和约​​会,无需循环。然后,您可以根据需要输出结果。

IntervalTime | StartTime | EndTime  | Appointment Name
06:00:00     |           |          | 
06:15:00     |           |          | 
06:30:00     |           |          | 
06:45:00     | 06:45:00  | 08:00:00 | Edge 
07:00:00     | 06:45:00  | 08:00:00 | Edge 
07:15:00     | 06:45:00  | 08:00:00 | Edge 
07:30:00     | 06:45:00  | 08:00:00 | Edge 
....

答案 1 :(得分:2)

您可以使用CFLOOP标记直接循环时间增量。例如,此代码每15分钟输出一次。您可以将这样的循环与支票(Q的Q可能)组合以提取可用性。

<cfloop index="tm" from="8:00 AM" to="5:00 PM" step="#createTimespan(0,0,15,0)#">    
    <cfoutput> <li>#TimeFormat( tm, "h:mm TT" )#</li></cfoutput>
</cfloop>

请记住,对于短迭代,这是一个很好的解决方案。如果进行长时间的迭代,我会设置&#34; step&#34;属性为变量而不是直接调用函数。如果真的很长,我可能会选择别的东西。但是,对于几天的增量,我认为它将完美无缺。请参阅Interesting loop for date and time上的这篇文章。祝你好运!

答案 2 :(得分:1)

我通常在开始循环之前输入一个垃圾值。

<cfset CompareValue = "value that will never occur in real life">
<cfloop>
<cfif FieldToCheck is not CompareValue>
<cfset CompareValue = FieldToCheck>
more code
<cfelse>
appropriate code, maybe nothing
</cfif>
</cfloop>