|
|
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
Задача: Есть две таблицы с датами. Нужно сделать соответствие между каждой датой в одной таблице и максимально приближенной к ней с наименьшей стороны в другой. К сожалению я полный делитант, мой запрос работает, но производительность оного как сами видите просто ужасная. Видимо надо использовать переменные или что-то еще, а я в этом полный профан. Короче горю. Сам запрос: SELECT DISTINCT MAX(D."DATE"), D1."DATE" FROM "1.DBF" D, "2.DBF" D1 WHERE (D1."DATE" >= D."DATE") GROUP BY D1."DATE" БУДУ ПРИЗНАТЕЛЕН ЗА ЛЮБОЙ СОВЕТ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 09:45:56 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
Неужели никто не поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 10:45:47 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
Запрос, по моему менять не надо, а вот индексы по полю Date построить надо. И еще мне непонятно название таблицы "1.DBF", Вы в MSSQL работаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 10:50:55 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
Запрос можно написать примерно так: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 11:05:03 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
Я думаю Distinct здесь не нужен. Достаточно GROUP BY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 11:15:07 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
У Вас почти правильно все написано. Уберите из запроса DISTINCT (во-первых, это лишнее, а во-вторых, тормозит) и добавьте LEFT OUTER JOIN, если хотите в выборке иметь все даты из исходной таблицы. Как результат, имеем при следующих условиях: 1). таблица, из которой берутся исходные даты - D; 2). таблица, в которой ищутся даты, максимально приближенные снизу к соответствующим датам исходной - D1, такой запрос Select D.[date], max(D1.[date]) from D LEFT OUTER JOIN D1 on D.[date] >= D1.[date] group by D.[date] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 12:26:57 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
2 Vap Условие ABS(DATE - D.DATE) DESC неправильно, потому что D1."DATE" >= D."DATE") это не одно и тоже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 12:32:31 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
To Vasiliy почему неправильно ? Запрос соеденит 2 таблицы по дате с минимальной разницей между соседними датами. Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 12:53:28 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
DESC - лишняя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 12:55:41 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
2 Vap Условие ABS(DATE1 - DATE2) неравносильно условию DATE1 >= DATE2 Пример DATE1 17/10/02 DATE2 15/10/02 18/10/02 При DATE1 >= DATE2 DATE2=15/10/02 При ABS(DATE1 - DATE2) DATE2=18/10/02 т.е. ABS(DATE1 - DATE2) < 4 <=> (DATE1 - DATE2) < 4 OR (DATE2 - DATE1) < 4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 14:06:24 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
См. текст задачи =Есть две таблицы с датами. Нужно сделать соответствие между каждой датой в одной таблице =и максимально приближенной к ней с наименьшей стороны в другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 14:19:40 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
DATEDIFF не поможет? DATEDIFF Returns the number of date and time boundaries crossed between two specified dates. Syntax DATEDIFF ( datepart , startdate , enddate ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 14:20:01 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
Спасибо всем, кто отозвался, но задача по-прежнему не решена. Я уже писал, что разбираюсь в SQL только на уровне простейших запросов. Мне кажется что алгоритм решения должен быть следующий: Пробегая по первой таблице, передаем в параметр значение текущей даты. Далее используя этот параметр находим подзапросом в другой таблице максимальную дату при условии что она меньша параметра и выдаем ее в качестве результата. Короче - это в чистом виде использование ФУНКЦИИ. Вот только как это сделать средствами SQL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 14:41:48 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
2 Vap Все правильно модуль то выдасть максимально приближенной к ней с наименьшей стороны и минимально приближенной к ней с наибольшей стороны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 14:54:45 |
|
||
|
Беда с запрососм
|
|||
|---|---|---|---|
|
#18+
Если задачу я понял правильно, то будет что-нибудь подобное: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.10.2002, 15:00:11 |
|
||
|
|

start [/forum/topic.php?fid=46&fpage=3387&tid=1819209]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
19ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
28ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 278ms |

| 0 / 0 |
