MS Access Datediff具有多个date1和单个date2参数

时间:2018-09-26 14:58:26

标签: ms-access ms-access-2013 datediff jet-sql

假设以下内容:

(忽略“创建表”段中错误的sql语法,为简化理解,我正在简化消息)

Create table Event_Participants ( 
Event_Name, text
Event_Participant, text
Event_Participant_Arrival, date/time
Event_Participant_Leaving date/time
)

没有PK,只有Event_Name和Event_Participant上的索引可以确保一个事件不能多次记录任何参与者。

同时假设

Create table Events (
Event_Name, text
Event_Start_Time, date/time
Event_End_Time, date/time
)

同样,没有PK:只有Event_Name是唯一索引

date1 = [查询以获取参与者特定事件1的到达时间]

date2 = [查询以获取Event1的特定Start_Time] (您可能已经注意到,date2是单数)

我想基于多个条件运行一个更新查询并使用它来更改一些数据,其中我只停留在以下条件上

where DateDiff("n",date1,date2)<0

(此特殊条件应检查是否有人迟到了)

我要坚持的是,如何对所有参与者进行以分钟为单位的日期/时间差异?

当date1是单行时,我可以使它工作,但在多行上,它说“可以获取最大一行”或类似的东西。

1 个答案:

答案 0 :(得分:0)

Dim rs As DAO.Recordset
Dim qry, points, pp As String
Dim pts As Integer

pp = Me.Form.cbo_query_picker.Value
Set rs = CurrentDb.OpenRecordset("SELECT DateDiff('n',IIf([Arrival Date]<=(SELECT Start_Date FROM Events WHERE Descriptive_Name='" & pp & "'),(SELECT Start_Date FROM Events WHERE Descriptive_Name='" & pp & "'),[Arrival Date]),IIf([Quitting Date]>=(SELECT End_Date FROM Events WHERE Descriptive_Name='" & pp & "'),(SELECT End_Date FROM Events WHERE Descriptive_Name='" & pp & "'),[Quitting Date])) AS pts, Event_Participants.Participant, Event_Participants.[Event Name] FROM Event_Participants")
rs.MoveFirst
Do Until rs.EOF = True
    pts = Int(rs("pts").Value / 30) * 3
    qry = "update customers set points = points + "
    qry = qry & Format(pts, "0")
    qry = qry & " where [Customer name] = '"
    qry = qry & rs("Participant") & "'"
    CurrentDb.Execute (qry)
    Debug.Print qry
    rs.MoveNext
Loop
rs.Close

这是我最终加在一起使访问工作像任何sql标准方言一样的VBA代码。 虽然我承认@Wolfgang Kais的回答 相反,我通过VBA解决了我的问题,并且希望您提出任何建议,以使它变得更加优雅。我认为可以将这些代码进行改进以使其看起来更好,但目前还不知道如何。