我能够在1小时的时间内获得查询 - 以15分钟为增量...
我只是试图在主键相同时停止显示重复结果。
ie:如果某事在早上6:45开始 - 并在上午8:00结束 - 我只希望它在主键(masterid)相同时跨越DIV一次。然后,如果其他东西是在早上8点使用不同的主键 - 跨越该时间帧等...
我正在考虑使用cfloop等 - 检查掌握的是相同还是不同/
关于如何做到这一点的想法......
查询代码工作正常 - 就像我的显示代码一样...包含图片以了解我想要做的事情。
<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>
答案 0 :(得分:3)
如评论中所述,作为桌面数据库,MS Access相当有限。 SQL Server等企业数据库为此类任务提供了更强大的功能,例如using CTE's。
但是,只是提供另一个视角,您也可以使用辅助时间表。 (在CTE出现之前,这是SQL Server中的常用方法)。您可以使用Mark's loop作为基础,在00:00
到23: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>