Помогите вывести правильно, если убрать COUNT(ip) AS total, то всё работает отлично, но без счётчика очень печально!
SELECT id, ip, COUNT(ip) AS total, pc, country, date
FROM user t
WHERE id = (
SELECT max(id)
FROM user
WHERE t.ip = ip
);
Изначально я использовал такую систему SELECT id, ip, COUNT(ip) AS total, pc, country, date FROM user GROUP BY ip DESC
, но после, захотел добавить ещё, чтобы каждая выведенная строка была последняя по id либо по дате, а не старая изначально.
вы почти всё правильно сделали. но
во вложенном запросе вам надо получить не один (максимальный) id
, а несколько — по одному для каждого ip
. это делается как раз директивой group by
— её надо применить ко вложенному запросу, а не к внешнему. см. первый запрос в примере.
для подсчёта количества строк во всей таблице, соответствующих ip
из получившегося набора, нужен ещё один, отдельный sql-запрос. его можно вставить прямо в список получаемых полей (заключив в скобки). см. второй запрос в примере.
вот поясняющий пример:
SQL Fiddle
MySQL 5.6 Schema Setup:
create table t (id int, ip text, d date);
insert into t (id, ip, d) values
(1, "1", "2017-05-16")
,(2, "2", "2017-05-17")
,(3, "1", "2017-05-01")
,(4, "2", "2017-05-02")
,(5, "1", "2017-05-05")
,(6, "1", "2017-05-10")
,(7, "2", "2017-05-11")
;
Query 1:
select t1.id, t1.ip, t1.d
from t as t1
where
t1.id in (
select max(t3.id) from t as t3
group by t3.ip
)
Results:
| id | ip | d |
|----|----|-----------------------|
| 6 | 1 | May, 10 2017 00:00:00 |
| 7 | 2 | May, 11 2017 00:00:00 |
Query 2:
select t1.id, t1.ip, t1.d,
(select count(1) from t as t2 where t2.ip = t1.ip) as total
from t as t1
where
t1.id in (
select max(t3.id) from t as t3
group by t3.ip
)
Results:
| id | ip | d | total |
|----|----|-----------------------|-------|
| 6 | 1 | May, 10 2017 00:00:00 | 4 |
| 7 | 2 | May, 11 2017 00:00:00 | 3 |
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
У меня возникает ошибка Undefined variable: usersЯ заранее извиняюсь, вопрос конечно элементарный