sql - 记录中没有日期需要过滤查询中的数据
问题描述
我有一个关于 sql 的问题,也许有人可以帮助我。在这种情况下,我有一个表,其中记录如下所示:
Name Account Percent MonthValue DateFrom
Element1 500 15 500 2016-01-01
Element1 501 45 500 2016-01-01
Element1 502 40 500 2016-01-01
Element1 500 100 500 2017-01-01
Element2 503 80 3000 2016-01-01
Element2 504 20 3000 2016-01-01
Element2 505 45 3000 2017-06-01
Element2 503 55 3000 2017-06-01
我必须显示结果,每隔一个月我可以看到哪些元素占帐户的百分比。例如 2016 年 2 月的 Element1 帐户 501 的值 1000 实际上是 450 的 45%。当同一个元素有几个日期时,我无法显示值。例如,2016 年 12 月 Element1 有 3 个帐户,但 2017 年 1 月 Element1 有 1 个帐户。我有我应该算的日期,但我还没有我应该算的日期。我期望的结果是这样的:
我想知道 2016 年 12 月的账户和这些账户的百分比,我得到结果:
Name Account Percent Value
Element1 500 15 75
Element1 501 45 225
Element1 502 40 200
Element2 503 80 2400
Element2 504 20 600
在其他情况下,我想知道 2017 年 6 月的账户和这些账户的百分比,然后我得到结果:
Name Account Percent Value
Element1 500 100 500
Element2 505 45 1350
Element2 503 55 1650
我希望我能解释问题的重点。下面我以当前形式显示我的 sql:
SELECT
a.NAME,
a.ACCOUNT,
a.PERCENT,
a.MONTHVALUE,
a.DATEFROM
from ELEMENTS a
where a.DATEFROM between :DATE_FROM and :DATE_TO
其中 :DATE_FROM, :DATE_TO 是用于比较日期的参数(但我没有用于比较的列 :DATE_TO)。请帮我解决这个问题,我希望有人知道除了插入到有日期的表列之外的解决方案。
解决方案
以下查询根据您的示例输出所需的结果:
declare @querydate date;
set @querydate = '2016-02-01'; --Set the desired query date
SELECT a.Name, a.Account, a.[Percent],
a.MonthValue * a.[Percent] / 100 as Value,
a.DateFrom
FROM ELEMENTS a
JOIN
(SELECT Name, MAX(DateFrom) as LastElementDate
FROM ELEMENTS
WHERE DateFrom <= @querydate
GROUP BY Name) b
ON a.Name = b.Name
AND a.DateFrom = b.LastElementDate
所以这里的想法是创建一个子查询(表 b),其中包含每个元素的最后记录日期。(MAX(DateFrom)。此外,@querydate 用于过滤日期高于所需日期的不需要的行。然后根据 Name 和 LastElementDate 将该表连接到主表,从而仅提取记录其日期与最后一个有效日期匹配。
推荐阅读
- azure - 一天后删除旧的 Azure Blob
- sql - 如何在雪花的列中用空格替换所有包含字母的行
- python - 是否可以对 python 中具有 read_sql 函数的数据框进行单元测试?
- amazon-web-services - 使用名称和日期过滤器从 Shell 脚本中删除 EBS 快照
- python - Python:帮帮我,我做错了什么?
- javascript - 角度 ng-multiselect-dropdown 获取 id
- java - 在 Result 中添加 webservice PUT/GET
- java - 使用 Spring JPA SqlResultSetMapping 调用存储过程并将查询结果映射到非实体 POJO
- libpqxx - libpqxx 准备好的语句非空检查指针类型
- java - 为什么在 Maven 工件搜索中使用 Intellij 添加依赖项不起作用?