当前位置: 首页 > 面试题库 >

如何基于MYSQL中的日期获取记录

商业
2023-03-14
问题内容

我有样本数据

 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。 问题答案: 试试这个