Есть несколько способов сделать это:
SELECT
my_id,
entry_date,
x,
y,
z
FROM
(
SELECT
DATEPART(DAYOFYEAR, entry_date) AS day_of_year,
MIN(entry_date) AS first_of_day
FROM
My_Table
WHERE
entry_date > DATEADD(dy, -1 * @num_days_back, GETDATE())
GROUP BY
DATEPART(DAYOFYEAR, entry_date)
) SQ
INNER JOIN My_Table MT ON
MT.entry_date > DATEADD(dy, -1 * @num_days_back, GETDATE()) AND
MT.entry_date = SQ.first_of_day
Или, альтернативно
SELECT
my_id,
entry_date,
x,
y,
z
FROM
My_Table MT1
LEFT OUTER JOIN My_Table MT2 ON
MT2.entry_date > DATEADD(dy, -1 * @num_days_back, GETDATE()) AND
DATEPART(DAYOFYEAR, MT2.entry_date) = DATEPART(DAYOFYEAR, MT1.entry_date) AND
MT2.entry_date < MT1.entry_date
WHERE
MT1.entry_date > DATEADD(dy, -1 * @num_days_back, GETDATE()) AND
MT2.my_id IS NULL
Я не проверял их, поэтому дайте мне знать, если у вас возникнут какие-либо проблемы. Кроме того, если в начале дня у вас есть две строки с одинаковыми значениями entry_date, то оба запроса будут возвращать обе строки.