как считать записи только с самой новой датой - PullRequest
0 голосов
/ 26 марта 2012

Как мне изменить этот запрос MySQL, чтобы он учитывал только идентификаторы из идентификаторов таблиц, где столбец «Дата» содержит самую новую (младшую) дату?

SELECT COUNT(leadID) as accepted FROM leads WHERE change like '%OK%'

Проблема в том, что leadID может иметь несколько экземпляров в таблицах приводит. Исходный результат запроса - «4» из-за одного дубликата. Правильный результат - «3».

Дата хранится в этом формате: 2011-10-26 18:23:52. Результат должен учитывать часы и минуты при определении самой младшей даты.

ТАБЛИЦА ведет:

leadID | date                | change
1      | 2011-10-26 18:23:52 | BAD
1      | 2011-10-26 17:00:00 | OK
2      | 2011-10-26 19:23:52 | OK
3      | 2011-10-26 20:23:52 | OK
4      | 2011-10-26 21:23:52 | OK
5      | 2011-10-26 22:23:52 | BAD 

Ответы [ 4 ]

0 голосов
/ 26 марта 2012

Я думаю, это то, что вы ищете:

select count(distinct l1.leadId) as accepted from leads l1
left join leads l2
on l1.leadId = l2.leadId and l1.date < l2.date
where l2.date is null and l1.`change` like '%OK%'
0 голосов
/ 26 марта 2012

Вы должны решить, что вы подразумеваете под самой новой датой: самой последней?вчера?сегодня?

если вчера, то добавьте это к вашему запросу

  select * from mytable where date >= date_sub(now(), interval 1 day)
0 голосов
/ 26 марта 2012

если вы используете базу данных oracle, вы можете использовать функцию max () для извлечения самой новой даты из таблицы, чтобы проверить таблицу на эту самую новую дату: -

SELECT COUNT(leadID) as accepted FROM leads WHERE change like '%OK%'
and date_col = (select max(date_col) from leads)

Я предполагаю, что с самой новой датой ваше среднее значение будет самым новым в данных таблицы.

изменений: - согласно изменениям в вопросе и согласно упомянутым в комментариях. Я думаю, что вы хотите взять самую новую дату среди записей, имеющих значение столбца «изменить», например «% OK%», и хотите подсчитать различный leadId

, пожалуйста, попробуйте следующий запрос-

SELECT COUNT(distinct leadID) as accepted FROM leads WHERE change like '%OK%'
    and date_col = (select max(date_col) from leads WHERE change like '%OK%')
0 голосов
/ 26 марта 2012

Вы можете попробовать (в случае, если ваша дата является функцией типа int по типу return by time ())

$sql = "SELECT COUNT(leadID) as accepted FROM leads WHERE change like '%OK%' ORDER BY Date DESC LIMIT 1"

Вы извлечете только самую новую запись.

Редактировать: Это также должно работатьдля вашего формата даты ГГГГ-ММ-ДД чч: мм: сс

Редактировать 2: Хорошо, я не понял вашего вопроса.У вас есть таблица лидерства: свинцовая дата. Вы хотите посчитать номер строки для новой даты.

Как и в другом примере, вы можете использовать оператор MAX:

SELECT COUNT(distinct leadid)
FROM LEAD AS l,
( SELECT MAX(Date) mdate FROM Lead ) AS MaxDate
WHERE l.date = MaxDate.mdate
AND l.change like '%OK%'
...