Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Запрос на последнюю запись в столбце  [new]
Ser813
Member

Откуда:
Сообщений: 65
Здравствуйте, подскажите, как правильно организовать запрос (получается отфильтровать) на то, чтобы из столбца_Дата брать последнюю запись и по этому критерию взять из столбца_Горючее соответ. значение ? спасибо.
12 окт 12, 08:48    [13306113]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Ser813,
автор
из столбца_Дата брать последнюю запись

последнюю это какую?Максимальную?
+ ?

select top (1) Дата,Горючее
from table
order by Дата desc 

12 окт 12, 08:54    [13306121]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Ser813
Member

Откуда:
Сообщений: 65
Получается что да, максимальную, т.е. Последняя дата месяца
12 окт 12, 09:08    [13306151]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Exproment
Member

Откуда:
Сообщений: 416
Ser813, Order by (ASK/Desk) + top(1)
12 окт 12, 09:10    [13306154]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Ser813
Member

Откуда:
Сообщений: 65
Я имел ввиду По последней дате месяца(Столбец_Дата) вывести соответ ему знацение из столбца_Горючее
12 окт 12, 09:10    [13306157]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Exproment
Member

Откуда:
Сообщений: 416
Ser813,
select top(1) Т.Горючее
from Таблица Т
Order by T.дата Desc (или ASC, не помню)
12 окт 12, 09:12    [13306163]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Exproment
Member

Откуда:
Сообщений: 416
ааа... все, я вас понял наверное, по последней дате каждого месяца ? или какого месяца ?
12 окт 12, 09:14    [13306171]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Ser813
Member

Откуда:
Сообщений: 65
Exproment,
в общем у меня запрос на период месяца(допустим с 1 окт по 31 окт 2012г), и мне нужно выгрузить в отчет значение(столбец_Горючее) на конец предыдущего месяца (на 30 сент 2012)
12 окт 12, 09:21    [13306201]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Ser813,
+ что-то в этом духе


declare @t table ( dt datetime, kol int )
insert  into @t
        ( dt, kol )
values  ( '20121012', 1 )
,       ( '20121013', 1 )
,       ( '20120912', 1 )
,       ( '20120909', 11 )
,       ( '20120919', 13 ) 
,       ( '20110919', 133 ) 
,       ( '20110919', 131 ) ;
with  zz
        as ( select max(t.dt) as dt
             from   @t t
             group by year(dt) * 100 + month(dt)
           )
  select  *
  from    zz z
  cross apply ( select top ( 1 )
                        *
                from    @t as t
                where   t.dt = z.dt
                order by t.kol desc
              ) q

12 окт 12, 09:23    [13306212]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Ser813
Exproment,
в общем у меня запрос на период месяца(допустим с 1 окт по 31 окт 2012г), и мне нужно выгрузить в отчет значение(столбец_Горючее) на конец предыдущего месяца (на 30 сент 2012)

declare @mydate datetime = '20121031'
select   dateadd(dd, -( day(@mydate) ), @mydate) as 'Last Day of Previous Month'

Дальше сами?
12 окт 12, 09:35    [13306258]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Ser813
Member

Откуда:
Сообщений: 65
denis2710, блин, запутался :) а если это месяц где не 31 а 30 или 28,29, и если вам не трудно можно с моими назв_столбцов,чтобы более понятно мне было - datvid (Дата выдачи) и Vidano_litr( это кол-во горючего)
12 окт 12, 09:41    [13306282]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Ser813,
По типу данных трудно сопоставить имена столбцов?
вы про какой запрос?
12 окт 12, 09:45    [13306297]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Exproment
Member

Откуда:
Сообщений: 416
Ser813, яб примерно так сделал:
select	top(1) Vidano_litr
from	Таблица
where	Year(dateadd(dd, -( day(@ТекДата) ), @ТекДата)) = Year(datvid) and
		Month(dateadd(dd, -( day(@ТекДата) ), @ТекДата)) = Month(datvid)
order by datvid desc 


ЗЫ: так вам всегда нужен последний день в месяце ? а если в таблице нет записи за этот день ?
12 окт 12, 09:46    [13306304]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Ser813
Member

Откуда:
Сообщений: 65
Exproment,
Она будет обязательно, поэтому я вот и мучаюсь что она может быть не только 30 но и 31, 28, 29 :)
12 окт 12, 09:49    [13306317]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Exproment
Member

Откуда:
Сообщений: 416
Прошу прощения, конечно же
declare @ТекДата = '20121031';

select	top(1) Vidano_litr
from	Таблица
where	Year(dateadd(mm, -1 , @ТекДата)) = Year(datvid) and
		Month(dateadd(mm, -1 , @ТекДата)) = Month(datvid)
order by datvid desc  
12 окт 12, 09:49    [13306319]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Exproment
Member

Откуда:
Сообщений: 416
Ser813
Exproment,
Она будет обязательно, поэтому я вот и мучаюсь что она может быть не только 30 но и 31, 28, 29 :)

Ну раз она будет обязательно, то отладте мой запрос на своих данных. Он всегда будет выводить за последнюю запись предыдущего месяца.
12 окт 12, 09:50    [13306325]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Ser813
Member

Откуда:
Сообщений: 65
select	top(1) Vidano_litr
from	dbo.gorn
where	Year(dateadd(dd, -( day(30) ), 31)) = Year(datvid) and
		Month(dateadd(dd, -( day(09) ), 10)) = Month(datvid)
order by datvid desc 

Я сделал так, но ничего не вывел
12 окт 12, 09:51    [13306327]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Exproment
Member

Откуда:
Сообщений: 416
Ser813,
Надо так. Примерно.
declare @ТекДата = '20121031';

select	top(1) Vidano_litr
from	Таблица
where	Year(dateadd(mm, -1 , @ТекДата)) = Year(datvid) and
		Month(dateadd(mm, -1 , @ТекДата)) = Month(datvid)
order by datvid desc  

ЗЫ: на форуме вам дают направление мышления, а не готовое решение. Если ничего не вышло ищите что не так и исправляйте
12 окт 12, 09:52    [13306334]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
iap
Member

Откуда: Москва
Сообщений: 47084
Ser813
Exproment,
Она будет обязательно, поэтому я вот и мучаюсь что она может быть не только 30 но и 31, 28, 29 :)
WHERE datvid < DATEADD(MONTH,DATEDIFF(MONTH,0,CURRENT_TIMESTAMP),0)

FAQ
12 окт 12, 09:53    [13306341]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
user89
Member

Откуда:
Сообщений: 2083
denis2710
declare @mydate datetime = '20121031'
select   dateadd(dd, -( day(@mydate) ), @mydate) as 'Last Day of Previous Month'
Здесь не отбрасываются часы:минуты:секунды
select dateadd(dd, -( day(getdate()) ), getdate()) as 'Last Day of Previous Month'
Last Day of Previous Month
2012-09-30 10:00:47.950


Последний день предыдущего месяца лучше находить так:
select dateadd(mm, datediff(mm, 0, getdate()), 0)-1 
12 окт 12, 10:02    [13306386]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Exproment
Member

Откуда:
Сообщений: 416
вам и не нужно ничего отбрасывать, точнее это даже невозможно. тип DateTime такой, каков он есть и вы его не измените. В общем вам уже два работающих варианта предложили. Дерзайте, а не пишите бессмысленные посты.
12 окт 12, 10:05    [13306402]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
user89
Member

Откуда:
Сообщений: 2083
а чтобы попали записи за последний день прошлого месяца включая 23:59:59,
то конечно же, нужно сделать как предложил iap постом выше.
12 окт 12, 10:06    [13306408]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Ser813
Member

Откуда:
Сообщений: 65
user89, спасибо огромное, работает но выводит почему-то Одну запись на этот период а у меня их точно Две ?
declare @ТекДата datetime = '20121031';
select   dateadd(dd, -( day(@ТекДата) ), @ТекДата) as 'Last Day of Previous Month'
select dateadd(mm, datediff(mm, 0, getdate()), 0)-1 
select	top(1) Vidano_litr
from	dbo.gorn
where	Year(dateadd(mm, -1 , @ТекДата)) = Year(datvid) and
		Month(dateadd(mm, -1 , @ТекДата)) = Month(datvid)
		
order by datvid desc 
12 окт 12, 10:07    [13306414]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Glory
Member

Откуда:
Сообщений: 104751
Ser813
но выводит почему-то Одну запись

А подумать, почему одну, лень ?
12 окт 12, 10:09    [13306431]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на последнюю запись в столбце  [new]
Ser813
Member

Откуда:
Сообщений: 65
Glory, ща попробую :)
12 окт 12, 10:11    [13306444]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить