2017-02-14 2 views
0

Я застрял в задаче, где мне нужно, чтобы выбрать нужный выход для таблицыMYSQL запрос на выборку для отчета

id | phone | ---- | is_lead_closed |  closed_date 
-- | -----------| ---- | ---------------| ------------------- 
1 | 9999999999 | ---- |  null  | 0000-00-00 00:00:00 
2 | 9999999999 | ---- |  1  | 2017-02-01 10:00:00 
3 | 9999999999 | ---- |  null  | 0000-00-00 00:00:00 
4 | 9999999999 | ---- |  null  | 0000-00-00 00:00:00 
5 | 9999999999 | ---- |  null  | 0000-00-00 00:00:00 
6 | 9999999999 | ---- |  null  | 0000-00-00 00:00:00 
7 | 9999999999 | ---- |  1  | 2017-02-10 10:00:00 

Здесь мне нужно на выходе последние отсчеты свинца после того, как ближе предыдущего свинца т.е. , 5, который является счетчиком после последнего закрытия.

ок я получил ДО этого момента Это моя таблица данных

id | lms_lead_id | ameyo_lead_id | call_time | is_lead_closed | lead_close_date 
177452 | 1387790 | 682 | "2017-02-06 10:07:31" | NULL | "0000-00-00 00:00:00" 
182023 | 1387790 | 682 | "2017-02-06 15:09:00" | NULL | "0000-00-00 00:00:00" 
182197 | 1387790 | 682 | "2017-02-06 15:20:12" | 1 | "2017-02-06 19:30:47" 
182283 | 1387790 | 682 | "2017-02-06 15:29:21" | NULL | "0000-00-00 00:00:00" 
183857 | 1387790 | 682 | "2017-02-06 17:30:20" | NULL | "0000-00-00 00:00:00" 
187708 | 1387790 | 682 | "2017-02-07 12:38:38" | NULL | "0000-00-00 00:00:00" 
188767 | 1387790 | 682 | "2017-02-07 13:31:50" | NULL | "0000-00-00 00:00:00" 
191257 | 1387790 | 682 | "2017-02-07 15:36:42" | NULL | "0000-00-00 00:00:00" 
192978 | 1387790 | 682 | "2017-02-07 16:44:33" | NULL | "0000-00-00 00:00:00" 
195362 | 1387790 | 682 | "2017-02-07 17:47:02" | NULL | "0000-00-00 00:00:00" 
196710 | 1387790 | 682 | "2017-02-07 18:33:23" | 1 | "2017-02-07 20:00:33" 
209832 | 1387790 | 396 | "2017-02-09 15:33:49" | NULL | "0000-00-00 00:00:00" 

Я создал запрос до сих пор

select 
a.lms_lead_id, 
LENGTH(SUBSTRING_INDEX(group_concat(close_status 
SEPARATOR ''), 
'1', 
- 2)) as attempts, 
DATEDIFF(max(call_time), min(call_time)) AS days 
from 
(select 
llct.lms_lead_id, 
if(llct.is_lead_closed = 1, 1, 0) as close_status, 
llct.call_time 
from 
lms_ameyo_call_tracker llct 
inner join lms_ameyo_call_tracker llct_1 ON llct.lms_lead_id = llct_1.lms_lead_id 
and llct_1.is_lead_closed = 1 
and date(llct_1.lead_close_date) between '2017-02-07' and '2017-02-07' 
and llct.ameyo_lead_id = llct_1.ameyo_lead_id 
where 
llct.ameyo_lead_id = 682) as a 
group by a.lms_lead_id; 

где lms_ameyo_call_tracker это имя таблицы Теперь я застрял с выборки call_time

+0

Я не получаю ваше требование. Не могли бы вы быть конкретными? – FreedomPride

+0

Мое требование - получать отсчеты из таблицы до предыдущего закрытого i.e, данные с id 3 до 7 –

+0

Добро пожаловать в Stack Overflow! Пожалуйста, отредактируйте свой вопрос, чтобы показать [то, что вы пробовали до сих пор] (http://whathaveyoutried.com). Вы должны включить [mcve] кода, с которым у вас возникают проблемы, тогда мы можем попытаться помочь с конкретной проблемой. Вы также должны прочитать [ask]. –

ответ

0

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

Следующий запрос должен выполнять эту работу, но может быть оптимизирован.

выберите count (*) из таблицы, где id> (выберите max (id) из таблицы, где id не включен (выберите max (id) из таблицы where is_lead_closed = 1) и is_lead_closed = 1) и id < = (выберите max (id) из таблицы, где is_lead_closed = 1)

+0

Спасибо @Sisir Я проверил запрос, но застрял между выполнением, так как таблица содержит миллионы записей в нем. –

+0

Да, это запрос разработчика, я не администратор базы данных. Чтобы закрепить выполнение, создайте индекс на ** is_lead_closed ** –

Смежные вопросы