MySQL Query Help? - PullRequest
       2

MySQL Query Help?

0 голосов
/ 30 марта 2011

Предположим, у меня есть таблица со столбцом идентификатора.

Я хочу выполнить MySQL Query, просматривая все данные в таблице и проверяя, удовлетворяет ли оно одному из двух условий. Если он удовлетворяет первому условию (называемому X), то я хочу найти идентификатор, когда будет выполнено следующее условие (Y) без какого-либо перекрытия. Таким образом, в основном шаблон объединит X и Y.

Отсутствие перекрытия означает, что, например, если ID, где было выполнено условие X, было 6, а ID, где было выполнено условие Y, было 12. Я не хочу, чтобы следующее условие X было между 6 и 12, даже если условие X существует.

Я запутался, как настроить запрос, подобный этому. Я думал, что мог бы использовать соединение той же таблицы, а затем иметь условие where, определяющее, что второй идентификатор больше первого, но это не сработало.

Первоначально у меня был запрос

SELECT x.id AS 'x_id', x.data AS 'x_data', y.id AS 'y_id', y.data AS 'y_data' 
FROM Table1 AS x, Table1 AS y 
WHERE y.id > x.id AND y.id-x.id >= 5 
AND Y Conditions AND X Conditions

id1, где x был встречен, id 2, где y был встречен, где data - это какое-то случайное число между 0 и 1. И если выполняется условие X (например, X <.5, тогда я хочу идентификатор), тогда я хочу следующее Идентификатор, где выполняется условие Y (например, Y> .6). Таким образом, в основном выходные данные представляют собой два разных идентификатора из одной таблицы на основе двух условий.

Я хочу, чтобы шаблон появлялся там, где он идет X, затем Y, затем X, затем Y, без наложения идентификаторов между X и Y

6, Data, 15, Data
6, Data, 21, Data
6, Data 23, Data
6, Data , 27, Data
9, Data, 15, Data
9, Data, 21, Data

В идеале это формат набора результатов, который я хочу id-x data id-y data

Помощь очень ценится.

1 Ответ

0 голосов
/ 30 марта 2011

Сначала представление, чтобы найти все допустимые (X, Y пары) шаблоны (с перекрытием):

CREATE VIEW valid AS
( SELECT x.id AS xid
       , x.datta AS xdata
       , ( SELECT MIN(y.id)
           FROM Table1 y 
           WHERE y.id - xid >= 5
           AND (Y conditions)      --Y conditions here
         ) AS yid
       , ( SELECT datta
           FROM Table1 y
           WHERE y.id = yid
         ) AS ydata
  FROM Table1 AS x
  WHERE (X conditions)      --X conditions here
);

(уточните у):

SELECT *
FROM valid
;

Создайте процедуру, которая находит шаблоны без наложения:

DELIMITER $$
CREATE PROCEDURE FindPatterns()
BEGIN
  SET  @lastgoody := -9999;
  SET @dummy := FALSE;

  SELECT xid, xdata, yid, ydata, testy, test FROM
    ( select xid
           , xdata
           , yid
           , ydata
           , @dummy := IF(q.xid > @lastgoody, TRUE, FALSE) as test
           , @lastgoody := IF(@dummy, q.yid, @lastgoody) as testy
      from valid q
      order by xid
    ) as p
  WHERE test ;
END$$
DELIMITER ;

Вы можете:

CALL FindPatterns;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...