mysql_real_escape_string / Говнокод #18210 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 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

Задание:
Выбрать последнее добавленное значение из таблицы и заджойнить данные из другой таблицы

Решение:
Join таблицы с самой собой по условию l1.ValueDATE<l2.ValueDATE и взять только строки, которые не сростились :)
(Строки 9 и 13)

Запостил: SatanicArmpit SatanicArmpit, (Updated )

Комментарии (9) RSS

  • > Решение:
    и что не так? это классика
    далее уже оптимизатор разруливает задачу плана запроса

    можно ещё rank(), если поддерживается субд (судя [по] [этому] кромешному [пиздецу] - поддерживается)

    главное, не max() в подзапросе
    Ответить
    • На серваке Sql 2000, так что Ранка нет.
      Юзать "классику" в таблице с 13,5 млн записей? ну, ок...
      Ответить
      • юзать логику "последнее добавленное значение из таблицы" на таблице с 13.5 млн записей без адекватных рахитектурных решений - ну ок

        постройте индекс typeobj, idpar, idobj, valuedate и добавьте в условие джойна все эти колонки, если такой поиск реально нужен постоянно

        когда же мне нужна была такая логика, я не обломался выделить специальную "булевую" колонку, в которой стоит true, если эта запись является конечной для своей группы, заиндексироваться вместе с этой колонкой и при инсерте новой записи сделать дополнительный апдейт по предыдущей последней записи
        Ответить
    • То есть, хэшмэтч на лефт джоине, который сожрет примерно 90% времени, это нормально?
      Ответить
  • >> не сростились

    наверное, это единственная ошибка?
    Ответить

Добавить комментарий

Переведи на "PHP", guest!

    А не использовать ли нам bbcode?


    8