|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Здравствуйте! Не подскажите как с помощью SQL запроса отобрать последние по дате записи из таблицы? Проограмма на Delphi. Используется стандартный Query с вкладки BDE. Вообщем, есть две таблицы: основная (MOTION.DBF) и справочник отделений (SPRAVOTDEL.DBF). В таблице MOTION.DBF несколько полей: Дата записи (DATERECORD), код отделения (CD), количество человек (SOSTVSE). В таблице SPRAVOTDEL.DBF - поле KEYMINE - это тоже самое, что поле CD в MOTION.DBF, SORTNUM - для сортировки. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.
В данном случае должны быть отобраны записи: Код: plaintext 1. 2. 3. 4. 5.
Т.е. сколько отделений в выбранном диапазоне справочника, столько и должно быть записей, но каждая из этих записей должна быть последняя по дате. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2010, 22:30 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Ewgeny911, А самому мозг не напрячь, студент блин ? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Ну что это сложно было самому сделать ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.03.2010, 23:34 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Вообще-то уже три недели голову ломаю. Написал вопрос потому что уже устал от поисков, ничего придумать не получается. thunder2 - Ваш запрос тоже не получается запустить. Не работает. Подозреваю что стандарный BDE не понимает некоторых выражений. Вот этих: Код: plaintext 1. 2. 3. 4.
Код: plaintext
Вообщем вот это работает: Код: plaintext 1.
Если никак выбрать записи SQL запросом не удастся, придётся циклом по таблице, но это наихудший вариант, не хотелось бы... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2010, 15:15 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2010, 16:06 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
eeerrt - Cпасибо за ответ! Ваш запрос выполняется без ошибок, но результат не тот. Выдаются все записи из таблицы MOTION, ведь группировка идёт по двум поля. Т.е. в результирующую таблицу попадают нескользо записей с отделением 111, несколько с 112 и т.д. А нужно то только по одной записи каждого отделения, но последней по дате. Код, который я приводил: Код: plaintext
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2010, 20:31 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Выбрать из дочерней таблицы записи с максимальной датой Поскольку Вы работаете через BDE, то, скорее всего, это означает аналог ODBC-драйвера для FoxPro. Т.е. Вам нужно решение для версии VFP6, поскольку драйверов ODBC для старших версий не выпускалось. Для VFP9 был выпущен драйвер OLE DB (ADO). ... |
|||
:
Нравится:
Не нравится:
|
|||
09.03.2010, 23:57 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Ewgeny911Нужно получить список записей из таблицы MOTION последних по дате по каждому отделению. SPRAVOTDEL нужен только для указания дипазона кодов отделений. Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2010, 09:42 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
eeerrt Спасибо за ответ! Запрос выполяется без ошибок, но опять результат не тот. В запросе стоят COUNT(distinct b.sostvse) kol_sostv, MIN(b.sostvse)minsostv,MAX(b.sostvse)maxsostv Но ведь не нужно какие то расчётные данные по полю sostvse. Нужно само значение поля sostvse в конкретной записи в MOTION - той записи которая была добавлена последней по дате для соотвтствующего отделения (поле CD). Фактически нужно не какие то расчётные значения получить, а список записей из MOTION, по одной для каждого значения в поле CD, но введённой последней по дате. Поле CD - код отделения, их всего уникальных около 60, они повтояются для каждой даты. Но если б они повторялись все без исключения, то можно было бы отсортировать таблицу по дате и взять все записи по последней дате. Проблема в том что не все они повторяются в каждой введённой дате... Можно бы и все поля из MOTION взять ... типа SELECT * FROM MOTION WHERE... вот только что после WHERE?) а к таблице SPRAVOTDEL можно и не обращаться - если она камень приткновения. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.03.2010, 23:02 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Ewgeny911 eeerrt Спасибо за ответ! Запрос выполяется без ошибок, но опять результат не тот. а к таблице SPRAVOTDEL можно и не обращаться - если она камень приткновения. Нет камень преткновения-нежелание автора думать собственной головой. Вас подтолкнули к решению:может быть дальше стоит попробовать самому разобраться:позапросить к базе и так и эдак,выкинуть ненужные поля,подкорректировать условие(если нужно) и т.д. ? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2010, 10:16 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Причём тут нежелание? Вероятно это вообще нвозможно. Уже три недели каждый день пытаюсь найти хоть какое то решение. Ладно... нет, так нет. Если б это срочно нужно было - давно бы уже сделал циклом, но это как то неправильно. Готов заплатить за решение... Если оно конечно вообще существует. А пока сделаю через цикл. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2010, 19:16 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Причём тут нежелание? Вероятно это вообще нвозможно. Уже три недели каждый день пытаюсь найти хоть какое то решение. Ладно... нет, так нет. Если б это срочно нужно было - давно бы уже сделал циклом, но это как то неправильно. Готов заплатить за решение... Если оно конечно вообще существует. А пока сделаю через цикл. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2010, 19:19 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Ewgeny911Причём тут нежелание? Вероятно это вообще нвозможно. Уже три недели каждый день пытаюсь найти хоть какое то решение. Ладно... нет, так нет. Если б это срочно нужно было - давно бы уже сделал циклом, но это как то неправильно. Готов заплатить за решение... Если оно конечно вообще существует. А пока сделаю через цикл. Это именно не желание. Я дал Вам ссылку на решение. Вероятно, Вы вообще туда не сходили. На всякий случай намекну. Подчеркнутая строка - это ссылка. Надо навести на нее указатель мыши и шелкнуть левой клавишей мыши Выбрать из дочерней таблицы записи с максимальной датой Вот Вам адаптированный вариант решения описанного по ссылке в случае, если для одного CD не может быть несколько записей с одинаковой (максимальной) датой Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Про общий случай, надеюсь, все-таки почитаете по ссылке... ... |
|||
:
Нравится:
Не нравится:
|
|||
11.03.2010, 20:19 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Вообщем так и не получилось... ВладимирМ Спасибо за помощь. Этот запрос тоже не срабатывает, хотя и компилируется без ошибок. Выполняется и программа зависает, только по диспечеру видно как кушает память... Насчёт того примера... тема похожая, но разобраться не получилось. Попробовал подойти к проблеме с другой стороны, сделал без SQL запроса, через цикл. Сейчас всё работает, по скорости тоже норм. Так что вопрос снят. Хотя если б всё таки через SQL решение было бы красивее. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2010, 08:38 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Этот запрос тоже не срабатывает вот как раз запрос Максимова работает нормально. Но все равно получить результирующие данные так как Вам хотелось не получится. Ведь Вы скромно умолчали, а что делать если для одного отделения (код 112) есть две записи с максимальной датой? А то что запрос не отрабатывает в BDE - то ищите проблемы в BDE. Могу предложить еще свой вариант: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2010, 11:13 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Этот запрос тоже не срабатывает вот как раз запрос Максимова работает нормально. Но все равно получить результирующие данные так как Вам хотелось не получится. Ведь Вы скромно умолчали, а что делать если для одного отделения (код 112) есть две записи с максимальной датой? А то что запрос не отрабатывает в BDE - то ищите проблемы в BDE. Могу предложить еще свой вариант: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2010, 11:15 |
|
Выбрать с таблицы записи по последней дате
|
|||
---|---|---|---|
#18+
Max Using the OVER clause will help YOU! ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2012, 09:06 |
|
|
start [/forum/topic.php?fid=41&msg=36507900&tid=1583669]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
35ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 408ms |
0 / 0 |