【问题标题】:Access SQL: Calculating Percent Change between two rowsAccess SQL:计算两行之间的百分比变化
【发布时间】:2018-08-29 22:39:30
【问题描述】:

我正在尝试计算 Access 中两个日期之间的百分比变化。 用户输入开始日期、结束日期和期望的百分比变化。如果结果符合条件,它应该返回名称。 请注意这是 dd/mm/yy 格式。

这是我的桌子:

Name   | Payment | DateTime
John   | 53.00   | 06/01/18
Mike   | 23.16   | 12/07/18
Steve  | 31.28   | 21/03/18
John   | 58.30   | 22/04/18

例如,如果用户输入的开始日期为 01/01/18,结束日期为 23/04/18,期望的百分比变化为 10%,那么它应该返回姓名 John。

目前,这是我的查询:

SELECT Name

FROM UserPayments

WHERE DateTime >= '01/01/18' AND DateTime <= '23/04/18';

我想计算两个条目的总百分比变化。这应该是第一个日期之后的记录日期和第二个日期之前的日期。

我完全不知道如何在 Access (SQL) 中执行此操作。 我想我需要使用连接,但我以前没有这样做过。

【问题讨论】:

  • 我不太明白其中的逻辑。约翰没有这两个日期的任何数据。
  • @Gordon,问题要求日期介于 (>= 和
  • @user10292318 。 . .你的描述还不清楚。如果约翰在此期间的数字是 5、10、7 怎么办?百分比变化是多少?
  • 我想计算两个条目(紧接在之后的日期和紧接之前的日期)的总百分比变化。用户输入百分比变化。这是两个日期之间价格的百分比变化。

标签: sql ms-access


【解决方案1】:

应该有一个Users 表,其主键类似于UserID,并且应该在UserPayments 表中使用UserID,而不是用户的Name

虽然使用FirstLast 之类的函数会很好,但MS Access 不允许使用ORDER BYGROUP BY 定义的组中的详细信息进行排序。因此,您将不得不使用子查询来检索这两个值以进行百分比计算。如果您有一个如上所述的Users 表,并且可以假定DateTime 值对于每个用户 是唯一的,则可能如下所示:

SELECT Users.Name, 
 (SELECT TOP 1 Payment FROM UserPayments 
  WHERE UserID = Users.UserID AND DateTime Between #01/01/2018# And #04/23/2018# 
  ORDER BY DateTime DESC)
  /
 (SELECT TOP 1 Payment FROM UserPayments 
  WHERE UserID = Users.UserID AND DateTime Between #01/01/2018# And #04/23/2018#
  ORDER BY DateTime ASC)
  -1 AS PercentChange
FROM Users;

注意舍入误差并将结果格式化为百分比。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多