2015-05-11 3 views
1

Я таблица ErrorLog со следующими полямиполучить определенное значение столбца с датой проверкой

Id - Primary key 
Message- varchar(200) 
CustomerId - int 
CreatedDate - DateTime 

Everytime вошедшим пользователем получает сообщение об ошибке, он регистрируется в ErrorLog таблицы.

Теперь я хочу, чтобы принести отчетливое сообщение вместе с всех других областях, где CreatedDate равно getdate()-1.

Для примера: Если у меня есть эти значения в моей таблице enter image description here

, то я должен получить выход как

enter image description here

после запроса.

Я не могу получить отличное значение Message от CreateDate. Любые идеи, как достичь этого?

+0

@downvoter комментарии PLZ –

ответ

1

Что-то, как это должно работать:

with cte as(
    select *, row_number() over(partition by Message order by CreatedDate desc, CustomerID) as rn from Table 
    where CreatedDate < cast(getdate() as date) and CreateDate >= dateadd(dd, -1, cast(getdate() as date)) 
) 

select * from cte where rn = 1 
+0

Спасибо за ответ, я хочу, чтобы принести Все поля –

+0

@SidM, просто выберите все столбцы. Отредактировано –

+0

Это не работает. Значения сообщений повторяются тогда :( –

0

Для того, чтобы получить определенные сообщения пользователя, вы можете, но вы не можете принести, а идентификатор или созданный дата очевидных причин (там может быть идентичным сообщения для различных идентификаторов или даты):

SELECT DISTINCT 
    CustomerId, Message 
WHERE 
    -- YourFilter here 

DateTime содержит временную часть даты, так что если вы не урезают это, вероятно, не соответствует с GETDATE() - 1.

Попробуйте отфильтровать так:

WHERE 
    CONVERT(VARCHAR, CreatedDate, 112) = CONVERT(VARCHAR, GetDate() - 1, 112) 

Функция преобразования сделает любой индекс по столбцу createdDate непригодного, но должна на хитрость.

Возможно, вы хотите вернуть запросы всего за один день, и в этом случае фильтр должен быть другим, и вы можете без проблем указать дату на отдельной (после удаления временной части).

+0

Я пробовал это 'CONVERT (VARCHAR (10), GETDATE() - 1,103)', однако его вторая задача , сначала нужно получить отдельное сообщение со всеми полями –

+0

Отредактировано для покрытия этого. – Juan

+0

PLZ проверить обновленный вопрос, добавленный пример для получения дополнительных разъяснений. –

1

Вам нужен ROW_NUMBER, чтобы найти последнюю строку за сообщение:

select Id, Message, CustomerId, CreatedDate 
from 
(
    select Id, Message, CustomerId, CreatedDate, 
     row_number() 
     over (partition by Message 
      order by CreatedDate desc) as rn 
    from ErrorLog 
    where your-condition-here 
) as dt 
where rn = 1 
+0

Спасибо за ответ, это помогает :) –

Смежные вопросы