, SQL Server 2005+: DATEADD(HOUR, 6, CAST(CAST(DATEADD(HOUR, 18, A.LogTime) AS DATE) AS DATETIME)). 18 LogTime, CAST, , 6 .
( ):
DECLARE @i INT = 5
DECLARE @endDate DATETIME = '2015-03-20 06:00:00.000';
DECLARE @startDate DATETIME = DATEADD(d, -@i, @endDate);
SELECT *
FROM (
SELECT A.Id
, A.LogTime
, FetchedOn = DATEADD(HOUR, 6, CAST(CAST(DATEADD(HOUR, 18, A.LogTime) AS DATE) AS DATETIME))
FROM(VALUES
(1, '2015-03-16 01:28:03.257')
, (2, '2015-03-16 05:28:03.257')
, (3, '2015-03-16 06:28:03.257')
, (4, '2015-03-16 18:28:03.257')
, (5, '2015-03-17 01:28:06.677')
, (6, '2015-03-17 06:28:06.677')
, (7, '2015-03-17 16:28:07.460')
, (8, '2015-03-17 07:28:03.257')
, (9, '2015-03-18 01:28:08.193')
, (10, '2015-03-18 05:28:03.257')
, (11, '2015-03-18 06:28:03.257')
, (12, '2015-03-18 18:28:03.257')
, (13, '2015-03-19 01:28:06.677')
, (14, '2015-03-19 06:28:06.677')
, (15, '2015-03-19 16:28:07.460')
, (16, '2015-03-19 07:28:03.257')
, (17, '2015-03-20 01:28:08.193')
, (18, '2015-03-20 05:28:03.257')
, (19, '2015-03-20 06:28:03.257')
, (20, '2015-03-20 18:28:03.257')
) A (Id, LogTime)
WHERE A.LogTime BETWEEN @startDate AND @endDate
) A
ORDER BY A.FetchedOn DESC, A.LogTime ASC;