Entschuldige bitte, dass ich deine Anforderung ungenau gelesen und dann noch deine SQL Grundkenntnisse überschätzt habe.
Für den 01.11.2016 machst Du es so.
SELECT m.Maschine, m.Meldezeit, m.Wert1, m.Wert2, m.Wert3
FROM Meldungen m
JOIN (SELECT Maschine, CAST(MAX(Meldezeit) as DATE) as MaxDate
FROM Meldungen
WHERE CAST(Meldezeit AS DATE) <= '2011-11-01'
GROUP BY Maschine) r
ON m.Maschine = r.Maschine AND CAST(m.Meldezeit as DATE) = r.MaxDate
Du kannst Dir den CAST() in der Where-Bedingung sparen, wenn Du sie mit "<" statt "<=" formulierst:
WHERE Meldezeit < '2016-11-02'
aber um den Preis, dass Du vorher einen Tag aufs Vergleichsdatum aufaddieren musst.
Du kannst diesen Tag auch vom SQL Server addieren lassen:
WHERE Meldezeit < DATEADD(DAY, 1, '2016-11-01'
dann hast Du das gewünschte Datum klar in der Query stehen.
Was davon jetzt die "richtigste" Lösung ist, hängt auch davon ab, wie Du die Query nutzt. Ist sie in ein Programm eingebettet?
Rolf