Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод последней даты через MAX() и GROUP BY / 6 сообщений из 6, страница 1 из 1
11.03.2021, 05:37
    #40052509
XJIOP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней даты через MAX() и GROUP BY
Доброго времени суток!

Подскажите как в этом запросе получить из posts самую последнюю дату, MAX(added) AS max_added почему то выводит самую старую дату... все остальное выводит так как нужно.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
SELECT
topics.id,
topics.forum_id,
topics.title,
SUM(posts.total) AS total_posts,
posts.max_added AS post_added
FROM topics

LEFT JOIN 
	(SELECT 
     	posts.topic_id,
     	p.total,
     	p.max_added
     	FROM posts
		
	INNER JOIN 
     		(SELECT 
                topic_id,
             	COUNT(id) AS total,
		MAX(added) AS max_added
		FROM posts 
             
                GROUP BY topic_id 

	) AS p ON p.max_added = posts.added AND p.topic_id = posts.topic_id	

) AS posts ON posts.topic_id = topics.id

GROUP BY forum_id
...
Рейтинг: 0 / 0
11.03.2021, 07:50
    #40052517
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней даты через MAX() и GROUP BY
XJIOP
MAX(added) AS max_added почему то выводит самую старую дату...
А тип поля max_added случайно не текстовый?
...
Рейтинг: 0 / 0
11.03.2021, 07:59
    #40052521
XJIOP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней даты через MAX() и GROUP BY
Akina,
Тип поля datetime
...
Рейтинг: 0 / 0
11.03.2021, 08:24
    #40052524
XJIOP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней даты через MAX() и GROUP BY
Еще один пример запроса, topic_added выводит последнюю дату а post_added самую старую, все остальное выводит правильно.
Уже замучался с этим, подскажите куда копать, нужно чтоб везде была последняя дата. Все поля с датами в формате datetime.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
SELECT forum.*,
topics.id,
topics.title,
topics.topic_added,
topics.total_topics,
topics.post_added,
topics.total_posts
FROM forum

LEFT JOIN (SELECT
	id,
	forum_id,
	title,
	MAX(topics.added) AS topic_added,
	COUNT(topics.id) AS total_topics,
	posts.post_added,
	SUM(posts.total_posts) AS total_posts
	FROM topics

	LEFT JOIN (SELECT
		topic_id,
		MAX(added) AS post_added,
		COUNT(id) AS total_posts
		FROM posts
		GROUP BY topic_id
	) AS posts ON posts.topic_id = topics.id

	GROUP BY topics.forum_id

) AS topics ON topics.forum_id = forum.id

GROUP BY forum.id
...
Рейтинг: 0 / 0
11.03.2021, 13:51
    #40052582
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней даты через MAX() и GROUP BY
Создайте fiddle на https://dbfiddle.uk/?rdbms=mysql_8.0 - таблицы (CREATE TABLE), пример данных (INSERT INTO, десяток записей достаточно), запрос, требуемый результат (как /* */ комментарий). И дайте ссылку. Будем смотреть предметно.
...
Рейтинг: 0 / 0
13.03.2021, 03:33
    #40053073
XJIOP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вывод последней даты через MAX() и GROUP BY
Всем спасибо, проблему решил сам вот таким вот говонокодом

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
SELECT 
forum.*,
maxi.last_added,
maxi.total_posts,
maxi.total_topics,
topics.id AS topic_id,
topics.title AS topic_title,
topics.added,
users.id AS userid,
users.username,
users.class
FROM forum
LEFT JOIN (
	SELECT 
	t.forum_id,
	MAX(COALESCE(p.added, t.added)) AS last_added,
	COUNT(p.id) AS total_posts,
	COUNT(DISTINCT(t.id)) AS total_topics
	FROM topics t
	LEFT JOIN posts p ON p.topic_id = t.id
	GROUP BY t.forum_id
) maxi ON maxi.forum_id = forum.id
LEFT JOIN posts p ON maxi.last_added = p.added
LEFT JOIN topics t ON maxi.last_added = t.added
LEFT JOIN topics ON topics.id = COALESCE(p.topic_id, t.id)
LEFT JOIN users ON users.id = COALESCE(p.owner, t.owner)
GROUP BY forum.id
ORDER BY forum.srt ASC


но зато это работает.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Вывод последней даты через MAX() и GROUP BY / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]