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

Подскажите как в этом запросе получить из 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
Вывод последней даты через MAX() и GROUP BY
    #40052517
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XJIOP
MAX(added) AS max_added почему то выводит самую старую дату...
А тип поля max_added случайно не текстовый?
...
Рейтинг: 0 / 0
Вывод последней даты через MAX() и GROUP BY
    #40052521
XJIOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Тип поля datetime
...
Рейтинг: 0 / 0
Вывод последней даты через MAX() и GROUP BY
    #40052524
XJIOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще один пример запроса, 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
Вывод последней даты через MAX() и GROUP BY
    #40052582
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создайте fiddle на https://dbfiddle.uk/?rdbms=mysql_8.0 - таблицы (CREATE TABLE), пример данных (INSERT INTO, десяток записей достаточно), запрос, требуемый результат (как /* */ комментарий). И дайте ссылку. Будем смотреть предметно.
...
Рейтинг: 0 / 0
Вывод последней даты через MAX() и GROUP BY
    #40053073
XJIOP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, проблему решил сам вот таким вот говонокодом

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


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