sql - 在 MSSQL 中编写查询以获取最近 30 天的报告
问题描述
我想创建一个报告基础,
潜在客户名称 | 经核实 | 验证日期 |
---|---|---|
铅 1 | 美国广播公司 | 2021 年 11 月 2 日 |
铅 2 | KMJ | 2021 年 9 月 2 日 |
铅 3 | 美国广播公司 | 2021 年 11 月 2 日 |
报告看起来像,考虑今天的日期为12-02-2021,我们需要为员工工作计数创建过去 30 天的报告
用户 | 2021 年 12 月 2 日 | 2021 年 11 月 2 日 | 2021 年 10 月 2 日 | 2021 年 9 月 2 日 | 2021 年 8 月 2 日 | 2021 年 7 月 2 日 | 依此类推,直到最后 30 天 |
---|---|---|---|---|---|---|---|
美国广播公司 | 0 | 2 | 0 | 0 | 0 | 0 | |
XYZ | 0 | 0 | 0 | 0 | 0 | 0 | |
KMJ | 0 | 0 | 0 | 1 | 0 | 0 |
我已经编写了如下的 MSSQL 查询,
CAST(lead.CREATED_ON as date) between cast(DATEADD(day, -30, getdate()) as date) and CAST(getdate() as date)
但是,我无法获取以下格式的数据,并且如果某个日期没有条目,则该日期应在所有用户面前显示 0
用户 | 2021 年 12 月 2 日 | 2021 年 11 月 2 日 | 2021 年 10 月 2 日 | 2021 年 9 月 2 日 | 2021 年 8 月 2 日 | 2021 年 7 月 2 日 | 很快 |
---|---|---|---|---|---|---|---|
请帮我完成这个查询,如果可能的话,请分享任何文章链接,这对我有很大帮助谢谢
解决方案
首先,日期真的像那样存储为字符串吗?如果是这样,那将是一个大问题,将使本已困难的情况变得更糟。重要的是,您应该将当前模式视为积极破坏。
继续前进,处理这种情况的最正确方法是在客户端代码或报告工具中透视数据。也就是说,从 SQL 数据库返回一个结果集,看起来更像这样:
用户 | 日期 | 价值 美国广播公司 | 2021-02-12 | 0 美国广播公司 | 2021-02-12 | 2 美国广播公司 | 2021-02-10 | 0 美国广播公司 | 2021-02-09 | 0 美国广播公司 | 2021-02-08 | 0 美国广播公司 | 2021-02-07 | 0 XYZ | 2021-02-12 | 0 XYZ | 2021-02-12 | 0 XYZ | 2021-02-10 | 0 XYZ | 2021-02-09 | 0 XYZ | 2021-02-08 | 0 XYZ | 2021-02-07 | 0 ... 等等
然后让客户端按照您的意愿重新格式化这些数据,而不是要求服务器通常以每个 cpu 内核数千美元的价格获得许可,并且不适合执行这项工作的任务。
但是,如果您真的必须在数据库服务器上执行此操作,您应该知道SQL 语言有非常严格的要求,即在查看任何数据之前,在查询评估时了解输出中列的数量、名称和类型。甚至SELECT *
尊重这一点,因为*
它基于提前知道的表定义。
如果输出在查看数据之前不知道有多少列,则必须分 3 个步骤执行此操作:
- 运行查询以获取有关列的数据。
- 使用步骤 1 的结果动态构建新查询。
- 运行新查询。
但是,由于您似乎总是需要正好 30 天的数据,如果您愿意将列命名为更像, , , ... ,则可以使用关键字在单个查询中执行此操作,PIVOT
例如无论当前日期如何,您都可以在数据透视代码中引用它们。OneDayBack
TwoDaysBack
ThreeDaysBack
ThirtyDaysBack
推荐阅读
- java - Main.class 在模块定义中的位置
- windows - Windows 启动上的文件检查失败
- c# - DI 容器如何在 services.AddTransient() 方法中使用 Func<> 委托类型?
- python - 无法安装 Python 包
- python-3.x - 如何使用 KEYAPI 运行谷歌翻译 v3?
- excel-formula - Excel:查找特定单词在列中的字符串中每次出现的位置/位置
- ios - 如何使用 Flutter 实现典型的 iOS 14 标头?
- java - 将 SQL 查询数据映射回存储库中的 Java 对象
- python - 如何结合元素乘法和矩阵乘法
- react-native - Formik 按钮不会使用 Scrollview 呈现