|
|
|
сделать выборку ОДНИМ селектом
|
|||
|---|---|---|---|
|
#18+
совсем голову сломал. ниче не лезет. дано: табла hist со структурой no - номер счета, date - дата, date_hist - дата изменения надо в одном селекте выбрать все счета, у которых поменялась дата например 01.01.2006 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 09:36 |
|
||
|
сделать выборку ОДНИМ селектом
|
|||
|---|---|---|---|
|
#18+
я че-то не понял вопроса. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 10:01 |
|
||
|
сделать выборку ОДНИМ селектом
|
|||
|---|---|---|---|
|
#18+
не так. в табле hist сранится история, что делали со счетом. на каждый счет несколько строчек. мне надо поле date изменилась по сравнению с предыдущим состоянием. причем у нужного состояния date_hist={01.01.2006} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 10:12 |
|
||
|
сделать выборку ОДНИМ селектом
|
|||
|---|---|---|---|
|
#18+
в транзакт-скуле было бы просто SELECT * FROM hist a WHERE (SELECT count(*) FROM hist b WHERE b.no=a.no) > 1 AND a.date = {01.01.2006} в фоксе такое не прокатит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 10:22 |
|
||
|
сделать выборку ОДНИМ селектом
|
|||
|---|---|---|---|
|
#18+
тоесть AND a.date_hist = {01.01.2006} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 10:23 |
|
||
|
сделать выборку ОДНИМ селектом
|
|||
|---|---|---|---|
|
#18+
я наверно неправильно объясняю. по вашему селекту выйдут все счета, у которых больше чем одно сохранение и есть хотя бы одно с date_hist={01.01.2006}. мне же надо найти все счета, у которых есть хотя бы одно с date_hist={01.01.2006} у которых в предыдущем сохранении поле date не равно текущему значению поля date ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 10:57 |
|
||
|
сделать выборку ОДНИМ селектом
|
|||
|---|---|---|---|
|
#18+
Для Select-SQL такого понятия, как "последующая/предыдущая" запись не существует. Поэтому при ТАКОЙ постановке задачи Вы вообще ничего не сможете сделать. Попробуйте сформулировать задачу так: Найти все записи, у которых date_hist={01.01.2006} и существует запись, отличная от найденной с тем же значением поля "no" и значением поля date={01.01.2006} Если у этой таблицы есть уникальный идентификатор записи, то такая задача решается достаточно просто: Код: plaintext 1. 2. 3. 4. 5. Ну, или чуть по другому, для ускорения работы Код: plaintext 1. 2. 3. 4. Здесь поле Id - это как раз тот самый уникальный идентификатор записи. Если все-таки требуется учитывать именно "порядок следования", то лучше вообще отказаться от Select-SQL и решать эту задачу через SCAN...ENDSCAN с ручным заполнением временной таблицы. Посмотрите, насколько сложно в Select-SQL решается вопрос определения "порядкового номера" http://www.sql.ru/faq/faq_topic.aspx?fid=126 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2006, 15:31 |
|
||
|
сделать выборку ОДНИМ селектом
|
|||
|---|---|---|---|
|
#18+
я думаю, они не пойдут на создание нового уникального поля Id. старый добрай SCAN будут использовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2006, 03:47 |
|
||
|
сделать выборку ОДНИМ селектом
|
|||
|---|---|---|---|
|
#18+
всем спасибо! особенно Владимиру М. после долгих раздумий я сделал так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. засылаю запрос в оракл, но работает так долго, что от этого пришлось отказатся. значит не судьба, че нить другое придется придумать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.01.2006, 06:16 |
|
||
|
сделать выборку ОДНИМ селектом
|
|||
|---|---|---|---|
|
#18+
Hi !Guest! Исходя из предположения, что комбинация no+date_hist уникальна (т.е. не может быть в один день двух "изменений" - если может, то надо обеспечить уникальность дополнительным полем, или просто сменив Date на Datetime), а также что ОБЯЗАТЕЛЬНО для всех no имеется запись с датой 1.1.2006г. должен работать такой запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. (по дате_изменения - максимальной среди всех не превышающих заданной "текущей" даты_изменения), потом мы выбираем "текущее" значение сравниваемого атрибута, и сравниваем его с "предыдущим" - если они отличаются - в выборку попадает no - если они совпали - не попадает. Тонкое/неочевидное место (но IMHO это вполне корректно) - если в "истории" только одна запись по некоторому no - она никогда не попадёт в выборку (уже первый подзапрос её "отсеет") - т.к. нет "предыдущего состояния" - и просто не с чем сравнивать "текущее". Конечно если реально в истории нет данных с датой изменения "точно" 1.1.2006г - то придётся усложнить запрос - вместо точного значения DATE(2006,1,1) в оба подзапроса вставить еще один подзапрос, эта самую дату вычисляющий (следуя логике, если нету "истории" за 1.1.2006 то нужно взять наиболее "свежую" из предыдущих). Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.02.2006, 02:55 |
|
||
|
|

start [/forum/topic.php?fid=41&fpage=277&tid=1592475]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 342ms |

| 0 / 0 |
