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

Откуда: Санкт-Петербург
Сообщений: 520
Добрый день!

есть следующие таблицы:
CREATE TABLE [dbo].[adm_peoples](
	[adm_id] [int] IDENTITY(1,1) NOT NULL,
	[name] [varchar](50) NOT NULL,
	[surname] [varchar](50) NOT NULL

CREATE TABLE [dbo].[peoples](
	[people_id] [int] IDENTITY(1,1) NOT NULL,
	[name] [varchar](50) NOT NULL,
	[surname] [varchar](50) NOT NULL

CREATE TABLE [dbo].[items](
	[name] [varchar](50) NOT NULL,
	[mod] [varchar](50) NOT NULL,
	[count] [int] NOT NULL,
	[adm_id] [int] NOT NULL,
	[un_id] [uniqueidentifier] NOT NULL,
	[last_deliv] [datetime] NULL

CREATE TABLE [dbo].[delivery](
	[people_id] [int] NOT NULL,
	[un_id] [uniqueidentifier] NOT NULL,
	[date_delivery] [datetime] NOT NULL,
	[count] [int] NOT NULL


Задача: сделать выборку, в которой было бы указано, что
такой-то Items.Name, Items.mod, c ответственным (adm_peoples.Name) в последний раз был взят в такую-то дату (delivery.date_delivery) таким-то peoples.Name.

Пытаюсь оформить в коде:

SELECT it.name
      ,it.mod
      ,it.count
      ,appl.name
      ,max(dl.date_delivery) as Close_date
  FROM delivery dl
  inner join items it on
  it.un_id=dl.un_id
  inner join adm_peoples appl on
  it.adm_id=appl.adm_id
  group by 
  it.name
  ,it.mod
  ,it.count
  ,appl.name
  order by it.name


Получаю таблицу с максимальными датами и именами ответственных (adm_peoples.Name).
name	mod	count  	name	 Close_date
[b]chisel        type a	13	Ivan	        2014-09-02 14:55:52.023[/b]
chisel	        type b	9	Ivan	        2014-09-02 14:05:43.187
hammer	type a	5	Denis	        2014-09-02 14:03:53.790
hammer	type b	7	Denis	         2014-09-02 14:08:56.473
screwdriver	cross	        8	Vasiliy	2014-09-02 14:59:21.970

OK.

Добавляю выбор последнего взявшего (peoples.name)

SELECT it.name
      ,it.mod
      ,it.count
      ,appl.name
      ,ppl.Name
      ,max(dl.date_delivery) as Close_date
  FROM delivery dl
  inner join items it on
  it.un_id=dl.un_id
  inner join adm_peoples appl on
  it.adm_id=appl.adm_id
  inner join peoples ppl on
  dl.people_id=ppl.people_id
  group by 
  it.name
  ,it.mod
  ,it.count
  ,appl.name
  ,ppl.Name
  order by it.name

Получаю на выходе таблицу с абсолютно всеми значениями кто, когда и что брал.
name	        mod	        count	name	  name	Close_date
[b]chisel	        type a	13	Alex	  Ivan	        2014-09-02 14:55:52.023
chisel	        type a	13	Ivan	  Ivan	        2014-09-02 14:02:40.187[/b]
chisel	        type b	9	Alex	  Ivan	        2014-09-02 14:02:58.663
chisel	        type b	9	Ivan	  Ivan	        2014-09-02 14:05:43.187
chisel 	type b	9	Oleg	  Ivan	        2014-09-02 14:04:56.937
hammer	type a	5	Ivan	  Denis	2014-09-02 13:47:51.927
hammer	type a	5	Nikolay	Denis	2014-09-02 14:03:53.790
hammer	type b	7	Ivan	  Denis	2014-09-02 14:06:33.877
hammer	type b	7	Nikolay	Denis	2014-09-02 13:49:39.720
hammer	type b	7	Oleg	  Denis	2014-09-02 14:08:56.473
screwdriver	cross	        8	Oleg	  Vasiliy	2014-09-02 14:59:21.970


Коллеги, подскажите, пожалуйста, что я упускаю или что я забыл дописать?

Огромное спасибо.

Никогда не бойся делать то, что не умеешь.
Помни, профессионалы построили Титаник, а Ковчег любители.
3 сен 14, 08:15    [16526772]     Ответить | Цитировать Сообщить модератору
 Re: Выборка максимальных значений в таблице. Не втыкаю :(  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
SELECT top 1 with ties
       it.name
      ,it.mod
      ,it.count
      ,appl.name
      ,ppl.Name
      ,dl.date_delivery as Close_date
  FROM delivery dl
  inner join items it on
  it.un_id=dl.un_id
  inner join adm_peoples appl on
  it.adm_id=appl.adm_id
  inner join peoples ppl on
  dl.people_id=ppl.people_id
 order by ROW_NUMBER() over(partition by it.name,it.mod,appl.name order by dl.date_delivery desc) 
3 сен 14, 09:03    [16526885]     Ответить | Цитировать Сообщить модератору
 Re: Выборка максимальных значений в таблице. Не втыкаю :(  [new]
Kast2K
Member

Откуда: Санкт-Петербург
Сообщений: 520
LexusR,

Огромное вам спасибо за помощь!
3 сен 14, 09:37    [16526982]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить