0

これらのエントリを考慮する:

INSERT INTO `schedule_hours` (`id`, `weekday`, `start_hour`) VALUES
(1, 1, '09:00:00'),
(2, 2, '09:00:00'),
(3, 3, '09:00:00'),
(4, 4, '09:00:00'),
(5, 5, '09:00:00'),
(6, 6, NULL),
(7, 7, NULL),
(8, 1, '12:00:00');

次のクエリを実行しています。

SELECT MAX(id), weekday, start_hour
FROM schedule_hours
GROUP BY weekday
ORDER BY weekday

目的は、1 週間 (平日の 1 月曜日、2 火曜日など) を取得することですが、最新のエントリを返すことです。

したがって、私のテーブルには、月曜日に 2 つのエントリがあり、残りの日には 1 つのエントリがあり、最新のもののみを返したい (id はインクリメント フィールドです)。正しい結果は次のようになります。

8 1 12:00:00
2 2 09:00:00
3 3 09:00:00
4 4 09:00:00
5 5 09:00:00
6 6 NULL
7 7 NULL

私が現在得ているもの:

8 1 09:00:00 < wrong
2 2 09:00:00
3 3 09:00:00
4 4 09:00:00
5 5 09:00:00
6 6 NULL
7 7 NULL

id 列と weekday 列は正しいのですが、最初の行の start_hour 列の結果が正しくありません!

4

2 に答える 2

1

SELECT ステートメントにないフィールドの GROUP BY を許可する MySQL の利用を回避する代替手段:-

SELECT schedule_hours.id, schedule_hours.weekday, schedule_hours.start_hour
FROM schedule_hours
INNER JOIN
(
    SELECT weekday, MAX(id) AS MaxId
    FROM schedule_hours
    GROUP BY weekday
)Sub1
ON schedule_hours.id = Sub1.MaxId
AND schedule_hours.weekday = Sub1.weekday
ORDER BY schedule_hours.weekday
于 2013-10-10T15:19:59.967 に答える