Можно ли это сделать без функций и процедур? - PullRequest
0 голосов
/ 25 июля 2011

Мне дали кое-что подумать, и я не смог придумать ответ.Давайте рассмотрим пример базы данных сотрудников (схема сотрудников ).Моя задача состоит в том, чтобы найти самый длинный период, в течение которого никто не изменил свою зарплату, а именно: мне нужно найти атрибут from_date из записи, где разница между ним и атрибутом from_date в последующей записи максимальна среди других подобных(запись, последующая запись) атрибута кортежей.Мой вопрос: можно ли это сделать без использования хранимых процедур и функций?Мне сказали, что это должно быть трудно, но это действительно простой максимальный выбор, если функция используется - или нет?Я использую MySQL 5.1.Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 25 июля 2011

возможно не самый эффективный, но

SELECT TOP 1
datediff(s1.from_date
    ,(select top 1 s2.from_date from salaries s2 
      where s2.from_date > s1.from_date order by s2.from_date))
       AS daysSinceChange
FROM salaries s1
ORDER BY daysSinceChange DESC
0 голосов
/ 25 июля 2011

Я не знаю о датах, но о целых ...

  Select max(sub.x - tbl.x)
    From table_name tbl,
         (Select min(tbl2.x) x
            From table_name tbl2
           Where (matches outer record)
             And tbl2.x >= tbl.x) sub;

Как правило, выберите максимальную разницу x и y, где y - минимальная дата, соответствующая тому же пользователю, но со значением, превышающим значение, с которым он сравнивается. Если это законно, то что-то в этом роде должно работать.

...