2015-02-11 2 views
0

Вот пример набора данных из таблицы:MySql: Получить следующий ряд значений

| callid | called  | calling |  end   | 
|------------|--------------|-------------|---------------------| 
| 1411482360 | 001143792042 | 08444599175 | 2014-07-31 13:55:03 | 
| 1476992122 | 001143792042 | 08441713191 | 2014-07-31 14:05:10 | 

До сих пор мне удалось получить предыдущие значения строк и мне нужны следующие значения строки также. Вот мой запрос:

SELECT c.called as customer, c.calling as company, DATE_FORMAT(c.`end`,'%Y-%m-%d') as _date, 
     @G := if(@prevComp <> c.calling AND @prevCust = c.called AND @prevDate = DATE_FORMAT(c.`end`,'%Y-%m-%d'), 1, 0) as Gain, 
     @prevCust := c.called as prevCust, 
     @prevComp := c.calling as prevComp, 
     @prevDate := DATE_FORMAT(c.`end`,'%Y-%m-%d') as prevDate 
FROM cdrdata_archive c CROSS JOIN 
    (SELECT @prevComp := NULL, @prevCust := NULL, @prevDate := NULL) prevVals 
ORDER BY c.called, c.`end` 

выше запрос возвращает следующий результирующий набор:

Customer  Company  Date  prevCust  prevComp  prevDate  Gain 

00140443360 08434599117 2014-01-28 00140443360 08434599117 2014-01-28 0 
00475172558 08434599218 2014-01-27 00475172558 08434599218 2014-01-27 0 
00475172558 08434593455 2014-01-27 00475172558 08434599118 2014-01-27 1 

мне нужны предыдущие и следующие значения строки для расчета потерянных и полученные звонки в каждой компании. Мне удалось получить правильные полученные значения, однако для вычисления значений Lost (аналогично Gain, но в новой колонке), Мне нужен следующий клиент, компания и дата.

Может ли это быть включено в этот запрос без особых затрат или мне нужно его переписать?

+0

ли http://stackoverflow.com/questions/27160298/referencing-next-and-previous-row- ценности помогают? – Barmar

ответ

0

исследование с использованием MySQL LIMIT статья. Ваши строки возвращаются с ORDER BY, так что вам есть заказ, но не имеют «номер в списке», который LIMIT является

Так у вас есть запрос - и в конце SQL вы добавляете

LIMIT $x, 1, где у вас есть LIMIT <offset>, <count> Так что ваш счетчик ваша строка (1) и каждый раз, когда вы Гото «следующая» строку изменить

$x = $x + 1 

Надеется, что это помогает. http://www.mysqltutorial.org/mysql-limit.aspx

Так для третьего запроса типа вы показали бы:

SELECT c.called as customer, c.calling as company, DATE_FORMAT(c.`end`,'%Y-%m-%d') as _date, 
     @G := if(@prevComp <> c.calling AND @prevCust = c.called AND @prevDate = DATE_FORMAT(c.`end`,'%Y-%m-%d'), 1, 0) as Gain, 
     @prevCust := c.called as prevCust, 
     @prevComp := c.calling as prevComp, 
     @prevDate := DATE_FORMAT(c.`end`,'%Y-%m-%d') as prevDate 
FROM cdrdata_archive c CROSS JOIN 
    (SELECT @prevComp := NULL, @prevCust := NULL, @prevDate := NULL) prevVals 
ORDER BY c.called, c.`end` LIMIT 2,1 
Смежные вопросы