Определите дату «действителен до» в запросе MySQL - PullRequest
0 голосов
/ 18 января 2010

В этой таблице я храню изменяемые значения для определенных спидов. Со временем эти значения могут измениться, и spid может получить новое значение.

Теперь я хочу выяснить, когда будет включено определенное значение.

Это данные для одного спида

uid  spid   propertyvalue   creationdate      
--------------------------------------------------
1    3      First name       2010-01-17 22:34:00
37   3      Second name      2010-01-18 01:07:24
38   3      Third name       2010-01-18 01:09:00
39   3      Fourth name      2010-01-18 01:18:16
40   3      Fifth name       2010-01-18 01:20:02

Таким образом, первое значение начинается с 2010-01-18 01: 07: 24 и будет действовать до 2010-01-18 01: 01: 00 .

Я уже пробовал этот запрос:

SELECT s1 . * , 
       s2.creationdate AS datetwo
  FROM salespointproperty s1
  JOIN salespointproperty s2 ON s1.spid = s2.spid
                            AND s1.creationdate < s2.creationdate

Это дает мне много двойных записей (некоторые из них неправильные), и всегда пропускает последнее новое имя (так как после него нет новой даты создания) Пример:

uid spid    propertyvalue    creationdate           datetwo
-------------------------------------------------------------- 
1   3       First name       2010-01-17 22:34:00    2010-01-18 01:07:24 *
1   3       First name       2010-01-17 22:34:00    2010-01-18 01:09:00
37  3       Second name      2010-01-18 01:07:24    2010-01-18 01:09:00 *
1   3       First name       2010-01-17 22:34:00    2010-01-18 01:18:16
37  3       Second name      2010-01-18 01:07:24    2010-01-18 01:18:16
38  3       Third name       2010-01-18 01:09:00    2010-01-18 01:18:16 *
1   3       First name       2010-01-17 22:34:00    2010-01-18 01:20:02
37  3       Second name      2010-01-18 01:07:24    2010-01-18 01:20:02
38  3       Third name       2010-01-18 01:09:00    2010-01-18 01:20:02
39  3       Fourth name      2010-01-18 01:18:16    2010-01-18 01:20:02 *

Только строки со звездочкой верны. Пятое имя отсутствует.

1 Ответ

1 голос
/ 18 января 2010

Предполагается, что в вашем примере uid 37 действует до uid 38, uid 38 действует до uid 39 и т. Д.

SELECT
  s1.uid,
  s1.spid,
  s1.propertyvalue,
  s1.creationdate,
  MIN(s2.creationdate) AS datetwo
FROM salespointproperty s1
INNER JOIN salespointproperty s2
    ON s1.spid = s2.spid
    AND s1.creationdate < s2.creationdate
GROUP BY
  s1.uid,
  s1.spid,
  s1.propertyvalue,
  s1.creationdate;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...