Как я могу получить самую последнюю дату в SQL? - PullRequest
0 голосов
/ 09 марта 2012

Я хочу сделать SQL-запрос, который получает сегодняшнюю дату и самую последнюю дату из столбца даты.Поэтому, если в моей базе данных есть три записи со следующими датами:

  • 8 марта 2012 г.
  • 2 марта 2012 г.
  • 8 декабря 2011 г.

Я хочу, чтобы запрос SQL возвращал все записи за 8 марта 2012 г. и 2 марта 2012 г. (самая последняя дата).Как я могу это сделать?

Я могу датировать сегодняшнюю дату, используя:

CONVERT( varchar(100), DATEADD( DAY, 0, getdate() ), 111)

Спасибо

Редактировать: Спасибо всем.У меня просто есть еще один вопрос.Я создал два представления:

create view with top dates
CREATE VIEW topDates AS
select DISTINCT TOP 3 replace(CONVERT(VARCHAR(20),date,111),'-','/') AS dates from     CSAResults.dbo.Details

create view dateTwo
select *
from (select ROW_NUMBER() over (order by dates desc) as srNo, dates
    from topDates)
    AS employee
    WHERE srNo=2

И теперь я хочу выбрать * из моей БД, где столбец равен столбцу «даты» из представления «dateTwo»

select buildNumber
from CSAResults.dbo.Details
where buildNumber LIKE '%Main '+ (SELECT dates FROM dateTwo) + '%'

Но это ничего не возвращает.

Спасибо

Ответы [ 4 ]

2 голосов
/ 09 марта 2012

Вы можете сделать следующее:

select date
from yourtable
where 
(
    date = Convert(varchar(10), getdate(), 101)
    OR
    date IN (SELECT Max(date) 
                FROM yourtable
                WHERE date!= Convert(varchar(10), getdate(), 101))
)
1 голос
/ 09 марта 2012

На ваш второй вопрос:

select buildNumber
from CSAResults.dbo.Details
inner join dateTwo
on buildNumber LIKE '%Main '+ dateTwo.dates + '%'
1 голос
/ 09 марта 2012
SELECT *
INTO #TEMP
FROM
(
SELECT GETDATE() DATE_FIELD, 'Blah1...' OTHER_FIELDS
UNION SELECT GETDATE() DATE_FIELD, 'Blah2...' OTHER_FIELDS
UNION SELECT DATEADD(d,-1,GETDATE()) DATE_FIELD, 'Blah3...' OTHER_FIELDS
UNION SELECT DATEADD(d,-1,GETDATE()) DATE_FIELD, 'Blah4...' OTHER_FIELDS
UNION SELECT DATEADD(d,-3,GETDATE()) DATE_FIELD, 'Blah5...' OTHER_FIELDS
) A

SELECT * FROM #TEMP

SELECT * FROM
(
 SELECT DATE_FIELD, OTHER_FIELDS,
 DENSE_RANK() OVER (ORDER BY DATE_FIELD DESC) _RANK
 FROM #TEMP
) A
WHERE A._RANK < 3
1 голос
/ 09 марта 2012

Вот пример сценария, который делает то, что вы просите.Он использует подзапрос, чтобы выбрать все записи с MAX на дату.Вы просто добавили бы ИЛИ, чтобы также выбрать элементы на текущую дату.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...