|
|
|
Помогите написать запрос (маленькая поправочка).
|
|||
|---|---|---|---|
|
#18+
У меня есть таблица со структурой Vn (int) - идентификатор устр-ва, Measure(DateTime) - дата измерения, Val (smallmoney) - измеренное значение. В ней имеются данные Vn Measure Val 1 01.01.2002 100.00 2 01.01.2002 200.00 3 01.01.2002 300.05 1 02.01.2002 101.00 2 03.01.2002 202.00 3 04.01.2002 303.05 1 05.01.2002 105.00 2 05.01.2002 207.00 3 05.01.2002 308.05 Как мне написать такой запрос, чтобы он вернул только записи с максимальной датой до 05.01.2002, т.е с датой < 05.01.2002? Т.е мне нужно чтобы запрос выдал только следующие записи : 1 02.01.2002 101.00 2 03.01.2002 202.00 3 04.01.2002 303.05 Дело в том, что данные по разным устройствам могут приходить в разное время. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2002, 10:37:21 |
|
||
|
Помогите написать запрос (маленькая поправочка).
|
|||
|---|---|---|---|
|
#18+
SELECT * FROM "ИМЯ ТАБЛИЦЫ" WHERE Measure<'05.01.2002' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2002, 10:51:34 |
|
||
|
Помогите написать запрос (маленькая поправочка).
|
|||
|---|---|---|---|
|
#18+
select * from TABLE where Measure>='20020102' AND Date<'20020105' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2002, 10:53:27 |
|
||
|
Помогите написать запрос (маленькая поправочка).
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. кажись так, если правильно понял задачу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2002, 11:07:26 |
|
||
|
Помогите написать запрос (маленькая поправочка).
|
|||
|---|---|---|---|
|
#18+
звиняюсь за прошлый неверный ответ, прочитал вопрос еще раз. Вот так можно: select * from MyTable, (select Vn,Max(Measure) from MyTable where Measure<'05.01.2002' group by Vn) as TT(Vn,Measure) where MyTable.Vn=TT.Vn and MyTable.Measure=TT.Measure Должно работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2002, 11:26:35 |
|
||
|
Помогите написать запрос (маленькая поправочка).
|
|||
|---|---|---|---|
|
#18+
SELECT * FROM MyTable WHERE Measure = (SELECT MAX(Measure) FROM MyTable WHERE Measure < '05-01-2002') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2002, 11:33:29 |
|
||
|
Помогите написать запрос (маленькая поправочка).
|
|||
|---|---|---|---|
|
#18+
Dominic, специально для тебе накарябал: Код: 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. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. Запусти в QA и посмотри результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2002, 11:40:23 |
|
||
|
Помогите написать запрос (маленькая поправочка).
|
|||
|---|---|---|---|
|
#18+
Пошутил! Я пошутил! SELECT * FROM MyTable T1 WHERE Measure = (SELECT MAX(Measure) FROM MyTable WHERE Measure < '05-01-2002' AND Vn = T1.Vn) Если в таблице несколько сот тысяч записей... Наверное, быстрее выполнялось бы так (в батче): SELECT Vn, MAX(Measure) INTO #temp FROM MyTable GROUP BY Vn SELECT #temp.Vn, #temp.Measure, Val FROM #temp INNER JOIN MyTable ON #temp.Vn = MyTable.Vn AND #temp.Measure = MyTable.Measure По крайней мере на семерке шустрее шло, а в 2000 как там оптимизатор с подчиненными запросами работает - не знаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2002, 11:46:08 |
|
||
|
Помогите написать запрос (маленькая поправочка).
|
|||
|---|---|---|---|
|
#18+
ага, последний пример краше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2002, 11:59:16 |
|
||
|
Помогите написать запрос (маленькая поправочка).
|
|||
|---|---|---|---|
|
#18+
Дружище ~Bazul~, не шуми. Что мой подчиненный запрос, что твой вложенный - те же яйца (куриные), только в профиль. А насчет последнего примера, в твоей оценке которого я уловил иронию, то я не поленился сравнить производительность моей "временной таблицы" с твоим вложенным запросом на "боевых" данных (сопровождаю тут одну систему, собравшей за 3 года 4 млн. результатов химических анализов). Увы, "временная таблица" работает на 25% быстрее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2002, 12:24:58 |
|
||
|
Помогите написать запрос (маленькая поправочка).
|
|||
|---|---|---|---|
|
#18+
Я про твой последний код и говорю, что он краше ,чем предложенный мной. Увы, "временная таблица" работает на 25% быстрее. Это и понятно- два простых запроса, работают быстрее одного сложного(со вложенными подзапросами). Я стараюсь не загружать оптимизатор, и по мере возможности тоже пользуюсь временными таблами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2002, 13:40:10 |
|
||
|
Помогите написать запрос (маленькая поправочка).
|
|||
|---|---|---|---|
|
#18+
А можно и так: set dateformat dmy create table #tmV(Vn int, Measure DateTime, Val smallmoney ) insert into #tmV(Vn, Measure, Val) values(1,'01.01.2002',100.00) insert into #tmV(Vn, Measure, Val) values(2,'01.01.2002',200.00) insert into #tmV(Vn, Measure, Val) values(3,'01.01.2002', 300.05) insert into #tmV(Vn, Measure, Val) values(1,'02.01.2002', 101.00) insert into #tmV(Vn, Measure, Val) values(2,'03.01.2002', 202.00) insert into #tmV(Vn, Measure, Val) values(3,'04.01.2002', 303.05) insert into #tmV(Vn, Measure, Val) values(1,'05.01.2002', 105.00) insert into #tmV(Vn, Measure, Val) values(2,'05.01.2002', 207.00) insert into #tmV(Vn, Measure, Val) values(3,'05.01.2002', 308.05) select #tmV.* from #tmV, (select Vn,Max(Measure) as Measure from #tmV group by Vn) as TT where #tmV.Vn=TT.Vn and #tmV.Measure=TT.Measure drop table #tmV ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2002, 04:43:19 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32042458&tid=1820442]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
27ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 285ms |
| total: | 418ms |

| 0 / 0 |
