Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отбор последних внесенных записей, как составить запрос 
:(
    Опции темы
Ptica
Дата 20.12.2004, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 27.7.2004

Репутация: нет
Всего: 2



Господа!
Подскажите, как составить SQL-запрос. Задача приблизительно следующая. Есть таблица с бухгалтерскими проводками. Для каждой проводки есть код поставщика. Поставщиков много. По каждому поставщику есть множество проводок. Необходимо составить запрос так, чтобы его результат включал по одной записи для каждого поставщика, причем это должны быть записи проводок, внесенные последними. Например, по поставщику 001 были проводки в среду, четверг и пятницу, так вот в результат запроса должна попасть только пятничная проводка. А по поставщику 567 единственная проводка была год назад, и она тоже должна войти в запрос, как "последняя для данного поставщика". При определении "последнести" проводки решающую роль играет хронология физического внесения записей (сортировка идет по коду поставщика, а затем по автоинкрементному полю). Можно ли обойтись одним запросом, без организации циклов, промежуточных таблиц и т.д.?
PM MAIL   Вверх
AntonSaburov
Дата 20.12.2004, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 118



Так через MAX() и в условии поставить HAVING - разве не получиться ?
PM MAIL WWW ICQ   Вверх
boevik
Дата 20.12.2004, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Ptica, скорее всего запрос в запросе поможет решить проблему.
Внутрений запрос, что б найти max для каждого поставщика, внешний - выдать проводку.

Для более детального обсуждение, требуется структура таблицы.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 20.12.2004, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Не понимаю... если дата/время коррекции - критична, то почему в структуре нет даты/времени внесения коррекции записи?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ptica
Дата 20.12.2004, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 27.7.2004

Репутация: нет
Всего: 2



В общем, вот к чему я пока пришел:
Код

select kod,summa from provodki where rowid in (select max(rowid) from provodki group by kod) order by kod

Если есть что-то лучшее, предлагайте! Для простоты можно считать, что структура базы такая:
Код

CREATE TABLE [dbo].[provodki] (
[rowid] [int] IDENTITY (1, 1) NOT NULL ,
[kod] [int] NOT NULL ,
[summa] [numeric] NOT NULL
) ON [PRIMARY]

Akina
Вопрос правомерен. Просто я по ряду причин посчитал для себя удобным иметь в структуре автоинкрементное поле, а дату/время внесения записей пока не использовал, хотя ее тоже, наверное, неплохо бы иметь... я подумаю.

Это сообщение отредактировал(а) Ptica - 20.12.2004, 17:43
PM MAIL   Вверх
boevik
Дата 20.12.2004, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Цитата(Ptica @ 20.12.2004, 17:41)
Код

select kod,summa from provodki where rowid in (select max(rowid) from asd group by kod) order by kod

На это я и намекал. smile

Можно ещё такой запрос:
Код

select kod,summa from provodki о
where rowid = (select max(rowid) from asd i where о.kod = i kod group by kod) order by kod

Но не уверен, что он лучше твоего


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 20.12.2004, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 25
Всего: 454



Ptica
Цитата(Ptica @ 20.12.2004, 18:41)
Просто я по ряду причин посчитал для себя удобным иметь в структуре автоинкрементное поле, а дату/время внесения записей пока не использовал, хотя ее тоже, наверное, неплохо бы иметь...

Мало того что наличие и того, и другого поля не противоречит логике - оно вполне уместно. Автоинкремент ака счетчик - ключевое поле, а дата/время коррекции - информационное. Причем в твоем случае оно содержит значимые данные.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Ptica
Дата 21.12.2004, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 27.7.2004

Репутация: нет
Всего: 2



Спасибо всем откликнувшимся! smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0481 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.