Since it sounds like you don't have the other piece that would normally be needed in this to work easily, here is another approach.
Start by making a query on StudentID, DateTardy, PeriodTardy
This query is used by a function that you pass the student ID and number of tardies to.
The function would open the query, set the Where=StudentID. It would use your rules to calculate the difference between the passed number of tardies and the threshold for discipline.
IF the difference is 0, it returns TRUE
If there is a difference, it would open your query (query's order by would be TardyDate, TardyPeriod DESC) with a SELECT TOP and it would use the difference to tell how many records to fetch.
You then find the oldest record. If it is for today's DATE, then it returns TRUE, else it returns FALSE.
This means that for Mary, if its her 7th tardy the function immediately returns TRUE.
If it is her 8th, would SELECT TOP 2 StudentID, TardyDate, TardyPeriod FROM TblTARDY WHERE TblTardy.StudentID = PassedStudentID ORDER BY TardyDate, TardyPeriod DESC
You would then do a movefirst / movelast on the query. If the last date in your returned recordset is today, you return TRUE, else you return FALSE. This answers your "Was the 7th (or what ever) tardy TODAY?"
Now this would all drive a query that has
StudentName, StudentID, TotalTardies: DCount(Stuff for all of the tardies this student has had), YourCustomFunction(StudentID, TotalTardies)
So you'd end up with
Mary - IDNumber - 10 - TRUE for today, but
Mary - IDNumber - 6 - FALSE for yesterday.
It also means that if yesterday Mary had 7 tardies and she was tardy once today, you'd get
Mary - IDNumber - 8 - FALSE for today.
If Mary had 6 tardies yesterday but had 2 today, you'd see
Mary - IDNumber - 8 - TRUE for today.
Does this make sense?