Forum Discussion
Select MIN of 4 Dates
- May 19, 2022
what do you mean by "current date"? isn't it the same with Date()?
see if the Conditions are met in the new function.
1. create a simple query for MyTable
2. View the query in 'design view'
3. Set the column holding your 'date' field to "Descending" (This establishes the priority for the most recent dates) and set the criteria for that column as "Is Not Null" (this will eliminate null values from the query).
4. While still in design view for the query, look for and select the 'Query Design' tab at the top.
5. In the 'Query setup' area, look for the 'Return: All' selection box, and change the 'All' to '5'.
6. This will return the top 5 most recent dates.
* You can manually type in the number '1' in the 'Return:' selection box, This will return only the top 1 entry.
Hi, thanks for the response.
I have followed as above but I dont completely understand why I would lmite the results to 5. I would remove records that I need. Maybe I am not understanding or maybe I need to explain a bit further.
I have attached the output based on the query paramters above ( but I am showing ALL).
How would I bel able to return the MIN of the date for each ID?
I assume another query will need to be made. What is tricky is that I need to remove any dates in the past though so if it is a MIN in the record and if <Today then do not consider it.
- arnel_gpMay 18, 2022Iron Contributor
I agree with Normalization, but if you are unable to do it, you can still get the Min Date by calling
a UDF (user defined function) from your Query.
See Module1 for the function.
Open Query1 that uses this function.
- Tony2021May 19, 2022Iron Contributor
HI Arnel, you are correct that I am not able to Normalize at this point. It would require a lot of rework. I know of this concept but didnt think to apply it to dates. I know this now so a good lesson brought up by George.
I have looked at the db udf and query. It looks great & performs as intended.
I did leave out a point since I was going to figure out a solution on my own but the function I do not understand how to modify and kindly ask your assistance.
What I need now is to return the MIN but I need to consider the current date.
I will try to summarize in english:
(1) If all dates are >Date() ===>return the MIN (as the UDF does now)
(2) Exclude any dates that are <Date() however if all Dates are <current date then return the MIN of those dates that are <current date.I hope its not confusing. Grateful for the assistance. thank you in advance. Happy to add more detail if needed.
- arnel_gpMay 19, 2022Iron Contributor
what do you mean by "current date"? isn't it the same with Date()?
see if the Conditions are met in the new function.
- George_HepworthMay 17, 2022Silver ContributorThis screen shot clearly shows the "spreadsheet" style table problem. It is even shown in Excel, not Access! The solution is as I noted earlier. Correct the table design.
- Tony2021May 17, 2022Iron ContributorHI George,
Ok I understand your point on normalization but wouldnt the problem still exist if it were normalized? I have seen CASE used for this but its beyond my level.
here is an example
https://stackoverflow.com/questions/47965825/sql-query-case-when-min-closest-date-to-today
thank you- George_HepworthMay 17, 2022Silver Contributor
You should have a table with one record for each type of date and a foreign key to the parent LCID.
The table, therefore, has four fields, including its own Primary Key.
PrimaryKey
LCID (Foreign key to the parent table)
DateType or DateSequence (NoticeDate, Expirey1Date, Expiry2Date, UltExpireydate)
SequenceDate
Now, a query against this table, using Min or Max for SequenceDate, returns the earliest or latest date for each LCID.
SELECT LCID, Min(SequenceDate) as EarliestDate
FROM tblofExpireyDates
GROUP BY LCID
or
SELECT LCID, Max(SequenceDate) as LastestDate
FROM tblofExpireyDates
GROUP BY LCID
That would have to be joined back to the parent same table to get the appropriate DateSequence that corresponds to that LCID and date.
SELECT LCID, EarliestDate, DateSequenceFROM tblofExpireyDates INNER JOIN qryofEarliestDates
On tblofExpireyDates.LCID = qryofEarliestDates.LCID and tblofExpireyDates.SequenceDate = qryofEarliestDates.EarliestDate
or
SELECT LCID, LastestDate, DateSequence
FROM tblofExpireyDates INNER JOIN qryofLatestDates
On tblofExpireyDates.LCID = qryofLatestDates.LCID and tblofExpireyDates.SequenceDate = qryofLatestDates.EarliestDate