- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
select top 1000
[ObjectType] = N'Scv',
[SourceCodeId] = d.[IDOBJ],
[ParameterName] = N'DlitZamera',
[DateTime] = l1.[VALUEDATE],
[Value] = l1.[PERIOD],
[vValue] = NULL, [IsLive] = 1
from tm_mn_c8_kust.[dbo].[Lg] as l1
left join tm_mn_c8_kust.[dbo].[Lg] as l2 on (l1.IDOBJ=l2.IDOBJ and l1.ValueDATE<l2.ValueDATE)
inner join tm_mn_c8_kust.[dbo].[TiiDat] as d on d.IDDAT = l1.IDOBJ
where l1.TYPEOBJ=330 and
l1.IDPAR=15 and
l2.ValueDATE is null
defecate-plusplus 21.05.2015 11:31 # −4
и что не так? это классика
далее уже оптимизатор разруливает задачу плана запроса
можно ещё rank(), если поддерживается субд (судя [по] [этому] кромешному [пиздецу] - поддерживается)
главное, не max() в подзапросе
SatanicArmpit 21.05.2015 12:04 # +2
Юзать "классику" в таблице с 13,5 млн записей? ну, ок...
defecate-plusplus 21.05.2015 13:23 # −4
постройте индекс typeobj, idpar, idobj, valuedate и добавьте в условие джойна все эти колонки, если такой поиск реально нужен постоянно
когда же мне нужна была такая логика, я не обломался выделить специальную "булевую" колонку, в которой стоит true, если эта запись является конечной для своей группы, заиндексироваться вместе с этой колонкой и при инсерте новой записи сделать дополнительный апдейт по предыдущей последней записи
SatanicArmpit 21.05.2015 15:15 # 0
defecate-plusplus 21.05.2015 16:10 # −1
defecate-plusplus 21.05.2015 16:29 # 0
какой вариант получения "последнего значения" я ещё не учел?
GopDrop 21.05.2015 15:24 # +2
OptimizatorSQL 21.05.2015 15:33 # +2
max-wiz 21.05.2015 14:12 # −2
наверное, это единственная ошибка?