-- 3 - Solve the problem
SELECT
the_color,
the_largest_dte
FROM
(
SELECT
DATE_FORMAT(the_date, '%Y%m') as the_yyyy_mm,
the_color,
max(the_date) as the_largest_dte
FROM colors
GROUP BY
DATE_FORMAT(the_date, '%Y%m'),
the_color
) AS D
WITH MD AS
(
SELECT MAX(datefld) as maxdate
FROM mytable
),
CR AS
(
SELECT datefld, colorfld
FROM mytable AS MT
INNER JOIN MD
ON MT.datefld = MD.maxdate
)
SELECT MT.*
FROM CR
INNER JOIN mytable AS MT
ON MT.colorfld = CR.colorfld
AND MT.datefld <= CR.datefld
ORDER BY MT.datefld;
with td as (select *,datediff(CURRENT_DATE(),tdate) ds from temp_data)
select tdate,color from td where ds in
(
with tp as(
select month(tdate), min(datediff(CURRENT_DATE(),tdate)) as days from temp_data group by month(tdate))
select days from tp)
3条答案
按热度按时间kx5bkwkv1#
我没有MySQL,因此,我将使用SQL Fiddle。
步骤1和2创建表格并添加数据。步骤3将日期转换为YYYYMM格式以便分组和聚合。然后按新字段和颜色分组,使用MAX()函数选择最大的日期。
我本可以将新列保留在最终结果中,但结果集中没有它。因此,使用派生表在()内部语句中获取结果,并在外部语句中选择所需的两个字段(列)。
下面的屏幕截图显示了所有内容。
http://sqlfiddle.com/#!9/1700b5/7/0
ny6fqffe2#
正如我在问题的评论中提到的,您必须使用MAX function。
我不确定我是否理解你的要求,但我想你想得到所有的颜色示例,哪一天是最新的...
SQLFiddle
结果:
| 日期字段|彩色场|
| - ------|- ------|
| 2023年1月28日00时00分|红色|
| 2023年1月31日上午00时00分|红色|
| 2023年2月5日00时00分|红色|
lp0sw83n3#
我得到了你想要的输出。
https://dbfiddle.uk/92RoM59i