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

Откуда:
Сообщений: 65
Еще раз здравствуйте, Такая проблема у меня: Нужен запрос - есть Три поля (marka_avto,datvid,sdan_litr), нужно чтобы выводилось значения sdan_litr по последней записи datvid предыдущего месяца (допустим я создаю отчет по дате с 1 окт по 31 окт а выводит sdan_litr за 29сент и 30 сент) .
Допустим:
марка Датавыдачи сдан_литров
КАМАЗ 29.09.12 20
ТАТРА 30.09.12 15
12 окт 12, 12:33    [13307735]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по последней записи в MSSql  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Дублируете тему? 13306113
12 окт 12, 12:41    [13307806]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по последней записи в MSSql  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Ser813,


DECLARE @date_begin smalldatetime
DECLARE @date_end smalldatetime
SELECT @date_begin ='20121001', @date_end ='20121031'

SELECT 
    marka_avto,
    datvid,
    sdan_litr
FROM TAB T1
    INNER JOIN 
    (    
    SELECT marka_avto, MAX(datvid) AS datvid
    FROM TAB T2
      WHERE datvid <= DATEADD(m,-1,@date_end) 
    GROUP BY marka_avto
    ) TT
    ON T1.marka_avto = TT.marka_avto AND T1.datvid = TT.datvid
12 окт 12, 12:55    [13307925]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по последней записи в MSSql  [new]
denis2710
Member

Откуда: Москва
Сообщений: 3384
Ser813,

+ что-то в этом духе,дальше сами

declare @t1 table
  (
    marka_avto varchar(50)
  , datvid date
  , sdan_litr int
  )
insert  into @t1
        ( marka_avto, datvid, sdan_litr )
values  ( 'КАМАЗ', '20120929', 20 )
,       ( 'КАМАЗ', '20120927', 120 )
,       ( 'ТАТРА', '20120930', 15 )
,       ( 'ТАТРА', '20120915', 15 )
,       ( 'ТАТРА1', '20120930', 153 )
,       ( 'ТАТРА1', '20120915', 151 )
,       ( 'ТАТРА1', '20121015', 151 )
declare @dateFrom date= '20121001'
, @dateTo date = '20121031'
declare @date_endpm date = dateadd(mm, datediff(mm, 0, @dateFrom), 0) - 1 
--select  @date_endpm

select  *
from    @t1 t
where   t.datvid = ( select top ( 1 )
                            t1.datvid
                     from   @t1 t1
                     where  t1.marka_avto = t.marka_avto
                            and t1.datvid < = @date_endpm
                     order by datediff(dd, t1.datvid, @date_endpm)
                   )
 

12 окт 12, 12:57    [13307943]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по последней записи в MSSql  [new]
Sekoka
Member

Откуда:
Сообщений: 73
DECLARE @t TABLE (marka_avto nvarchar(max),datvid datetime,sdan_litr int)
DECLARE @dn datetime='01.10.12', @dk datetime='31.10.12'

INSERT INTO @t
VALUES 
('КАМАЗ', '28.09.12', 4),
('ТАТРА', '28.09.12', 6),
('КАМАЗ', '29.09.12', 20),
('ТАТРА', '30.09.12', 15),
('КАМАЗ', '29.10.12', 21),
('ТАТРА', '30.10.12', 16)

SELECT marka_avto
,datvid=(SELECT MAX(datvid) FROM @t WHERE marka_avto=t.marka_avto and datvid<=DATEADD(DAY,DATEPART(DAY,GETDATE())*-1,GETDATE()))
,sdan_litr=(SELECT sdan_litr FROM @t WHERE marka_avto=t.marka_avto and datvid=(SELECT MAX(datvid) FROM @t WHERE marka_avto=t.marka_avto and datvid<=DATEADD(DAY,DATEPART(DAY,GETDATE())*-1,GETDATE())))
FROM @t as t
WHERE datvid BETWEEN @dn and @dk
12 окт 12, 13:19    [13308115]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по последней записи в MSSql  [new]
Ser813
Member

Откуда:
Сообщений: 65
trew, здесь TT это что ?
12 окт 12, 13:57    [13308388]     Ответить | Цитировать Сообщить модератору
 Re: Запрос по последней записи в MSSql  [new]
trew
Member

Откуда: Москва
Сообщений: 2646
Ser813,

T1, T2, TT - это алиасы (псевдонимы) таблиц.
12 окт 12, 14:26    [13308604]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить