我有样本数据
ID Name Amount cal_amt Run_amt Dates
1 Test 15000 0.00 15000 2020-06-01
1 Test 15000 0.00 30000 2020-04-01
1 Test 15000 12000 30000 2020-05-01
2 Test_1 18000 0.00 25000 2020-06-01
2 Test_1 18000 0.00 35000 2020-04-01
2 Test_1 18000 16000 35000 2020-05-01
我需要获得Run_Amount的MAX(month),即:2020-06-01-> 15000
需要获取当前月份的cal_amt,即:2020-05-01-> 12000和0.00也与本月相关2020-04-01
我需要这样的输出:
ID Name Amount cal_amt Run_amt
1 Test 15000 12000 15000
2 Test_1 18000 16000 25000
它是示例数据,但还有另外几列我尝试使用 MAX()条件 和
ROW_NUMBER()over (PARTITION BY run_amt order by Date )
谁能建议我最好的方法
使用ROW_NUMBER()
window函数获取具有Run_amt
最大月份的的行,然后进行条件聚合:
SELECT t.ID, t.Name, t.Amount,
MAX(CASE WHEN LAST_DAY(Date) = LAST_DAY(CURRENT_DATE) THEN cal_amt END) cal_amt,
MAX(CASE WHEN t.rn = 1 THEN Run_amt END) Run_amt
FROM (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY ID, Name, Amount ORDER BY Date DESC) rn
FROM tablename
) t
GROUP BY t.ID, t.Name, t.Amount
或者:
SELECT t.ID, t.Name, t.Amount,
MAX(t.cal_amt) cal_amt,
MAX(t.Run_amt) Run_amt
FROM (
SELECT ID, Name, Amount,
MAX(CASE WHEN LAST_DAY(Date) = LAST_DAY(CURRENT_DATE) THEN cal_amt END)
OVER (PARTITION BY ID, Name, Amount ORDER BY Date DESC) cal_amt,
FIRST_VALUE(Run_amt) OVER (PARTITION BY ID, Name, Amount ORDER BY Date DESC) Run_amt
FROM tablename
) t
GROUP BY t.ID, t.Name, t.Amount
参见演示。
结果:
> ID | Name | Amount | cal_amt | Run_amt
> -: | :----- | -----: | ------: | ------:
> 1 | Test | 15000 | 12000 | 15000
> 2 | Test_1 | 18000 | 16000 | 25000
问题内容: 在MySql数据库中有表 我的问题是,我要传递开始日期和结束日期,然后我将获得列日期,例如: 那么我将获得101,102,103 UserId的值。但是我出错了 问题答案: 这可能会更好: 也可能是保留字,对此不太确定。如果是这种情况,则您需要在其周围加反引号(前后应有一个`)
我的桌子有这样的结构 如何在mysql中获取上述数据的两个日期之间的事件(日期比较与年份无关)。例如,如果start_date是2014-05-01,结束日期是2014-05-20,则输出应该是 更新:如果同一个人的结婚日期和出生日期都在提供的日期范围内,则输出应包含该人的两列 (抱歉我的英语不好)
问题内容: 我希望能够使用以下语句从mysql中获取结果: 但是我想获取限制在某个月和一年中的结果(基于用户的输入)…我试图这样做: … 一个月,但它给了错误。 在该表中,它实际上有两个日期: 和,但我注重。输入值为月份和年份。我该如何措辞根据当年那个月获得结果的SQL语句? 问题答案: 您很接近-向后进行比较(假设是DATETIME或TIMESTAMP数据类型): 注意事项: 请注意,您正在使用
本文向大家介绍使用INTERVAL添加天数后,MySQL查询获取的日期记录大于当前日期?,包括了使用INTERVAL添加天数后,MySQL查询获取的日期记录大于当前日期?的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是从AddDay列添加天后获取大于当前日期的数据记录的查询- 这将
问题内容: 请考虑下表: 在这里,我要找回它们是具有独特组合的记录,和。如果存在两个或多个这些字段的唯一组合,我想选择其中的第一个。 作为上表数据的示例,我需要的输出是 (由于记录3和4具有相同的组合,我想只记录3,因为它是第一次出现) 我可以使用一条SQL语句执行此操作吗? 问题答案:
问题内容: 我想获得表中每个记录的最小日期,该记录具有一个主键的多个日期条目。看看我的桌子: 我想要这样的结果: 我想获取每个CaseNo的最短日期记录在我的桌子上。 我尝试了这段代码: 结果是这样的: 该代码删除没有最小日期的行。我想显示所有记录的最小日期为Min_date。 问题答案: 试试这个