特定时间段内的多笔交易,受日期范围限制

2023-12-12

我有一个包含交易、人员、交易日期、物品等的数据库。 每次有人购买商品时,交易都会存储在表中,如下所示:

personNumber, TransactionNumber, TransactionDate, ItemNumber

我想要做的是找到从 2012 年 1 月 1 日(交易日期)到 2012 年 3 月 1 日在 14 天内(可配置)或更短时间内多次购买相同 ItemNumber 的人(personNumber)。然后我需要在报告中列出所有这些交易。

样本数据:

personNumber, TransactionNumber, TransactionDate, ItemNumber
1           |               100|      2001-01-31|        200
2           |               101|      2001-02-01|        206
2           |               102|      2001-02-11|        300
1           |               103|      2001-02-09|        200
3           |               104|      2001-01-01|        001
1           |               105|      2001-02-10|        200
3           |               106|      2001-01-03|        001
1           |               107|      2001-02-28|        200

Results:

personNumber, TransactionNumber, TransactionDate, ItemNumber
1           |               100|      2001-01-31|        200
1           |               103|      2001-02-09|        200
1           |               105|      2001-02-10|        200
3           |               104|      2001-01-01|        001
3           |               106|      2001-01-03|        001

你会怎样做呢?

我尝试这样做:

select * 
from (
    select personNumber, transactionNumber, transactionDate, itemNumber,
count(*) over (
    partition by personNumber, itemNumber) as boughtSame)
from transactions
where transactionDate between '2001-01-01' and '2001-03-01')t
where boughtSame > 1

这让我明白了:

personNumber, TransactionNumber, TransactionDate, ItemNumber
1           |               100|      2001-01-31|        200
1           |               103|      2001-02-09|        200
1           |               105|      2001-02-10|        200
1           |               107|      2001-02-28|        200
3           |               104|      2001-01-01|        001
3           |               106|      2001-01-03|        001

问题是我不想要 TransactionNumber 107,因为它不在 14 天内。我不知道 14 天的限制应该放在哪里。我可以做一个 datediff,但是在哪里,通过什么?


唉,SQL Server 2005 中的窗口函数还不够强大。我将使用相关子查询来解决这个问题。

相关子查询计算一个人在每次购买后 14 天内购买该商品的次数(不包括第一次购买)。

select t.*
from (select t.*,
             (select count(*)
              from t t2
              where t2.personnumber = t.personnumber and
                    t2.itemnumber = t.itemnumber and
                    t2.transactionnumber <> t.transactionnumber and
                    t2.transactiondate >= t.transactiondate and 
                    t2.transactiondate < DATEADD(day, 14, t.transactiondate
             ) NumWithin14Days
      from transactions t
      where transactionDate between '2001-01-01' and '2001-03-01'
     ) t
where NumWithin14Days > 0

您可能还想在子查询中设置时间限制。

一个索引transactions(personnumber, itemnumber, transactionnumber, itemdate)可能会帮助它运行得更快。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

特定时间段内的多笔交易,受日期范围限制 的相关文章

  • 根据多列删除重复记录

    在我们的系统中 我们每小时从外部数据库进行导入 由于导入脚本中存在错误 现在存在一些重复记录 如果任何记录具有相同的内容 则视为重复 legacy id and company 我可以运行什么代码来查找并删除这些重复项 我正在玩这个 Pro
  • Oracle 中的 if(条件, then, else)

    MySQL MSSQL 有一个简洁的小内联 if 函数 您可以在查询中使用它来检测空值 如下所示 SELECT foo a field AS a field SELECT if foo bar is null 0 foo bar AS ba
  • 通过sql视图向多个表插入数据

    mysql 有没有办法通过视图向多个表插入数据 MySQL 参考手册对于可更新视图是这样说的 一些视图是可更新的 也就是说 您可以在诸如以下的语句中使用它们UPDATE DELETE or INSERT更新基础表的内容 为了使视图可更新 必
  • 部署 Visual Studio 2010 数据库项目

    我有一个 Visual Studio 2010 数据库项目 我想从中生成一个脚本 这只是将该数据库放到另一台机器上 问题是我找不到 对此的解决方案 当我开始这个项目时 我从开发电脑上的数据库导入了 shema 生成了架构对象 所有表和脚本都
  • 时态数据库设计,有一些变化(实时行与草稿行)

    我正在考虑实现对象版本控制 同时需要同时拥有活动对象和草稿对象 并且可以利用某人在这方面的经验的见解 因为我开始怀疑是否有可能在没有潜在可怕的黑客攻击的情况下实现这一点 为了示例 我将把它分解为带有标签的帖子 但我的用例更一般 涉及缓慢改变
  • SQL Server 存储过程更新不适用于 ASP.Net C# GridView RowUpdating

    我遇到了问题 但没有抛出任何错误 发生的情况是 我有一个存储过程正在驱动我的更新 但我无法更新 gridview 我击中了Update链接按钮 但它实际上并没有更新记录 这是我的存储过程 ALTER PROCEDURE dbo CompDe
  • SQL 代理作业 - 连接可能未正确配置,或者您可能对此连接没有正确的权限?

    通过 SQL 代理运行 SSIS 包时出现此错误 无法获取连接 ORACLE ADO NET 连接可能未正确配置 或者您可能对此连接没有正确的权限 当我以 SQL 代理用户身份登录并直接运行 ssis 包时 一切都很好 当我然后通过 SQL
  • 如何在 SQL Server 中引用触发器的“新”、“旧”行?

    所以我是 SQLite 的 SQL Server 新手 我习惯使用 New Old 关键字 我看到有些人使用insertedvalue 引用新创建的行 但这仅适用于插入而不适用于更新 我能得到类似的东西吗New我在这个查询中使用 creat
  • SQL Server 上的聚合(分组依据)如何工作?

    SQL Server如何实现group by子句 聚合 以执行计划作为灵感这个问题的 https stackoverflow com questions 1465827 select at onece query select p id D
  • 从 MySql 迁移到 Sql Server 2008

    我有大约 200 GB 的 Mysql 转储文件 现在我需要迁移到 Sql server 2008 那么我应该遵循什么方法 我应该继续逐行 sql 语句还是有任何适合我的要求的 GUI 工具 微软 SQL Server 迁移 Assista
  • 一张 400GB 表,一个查询 - 需要调优思路 (SQL2005)

    我有一个大表 我想对其进行优化 我正在使用 MS SQL 2005 服务器 我将尝试描述它的使用方式 如果有人有任何建议 我将非常感激 该表约400GB 有1亿行 每天插入100万行 该表有 8 列 1 列数据和 7 列用于查找 排序 k1
  • 如何在 MS ACCESS 中使用与 Oracle Rownum 相同的函数

    我遇到一个问题 我做了一个可以通过检测滚动位置来加载数据的功能 该功能是用SQL语句 Rownum 制作的 它只在Oracle中有效 但在ACCESS中无效 我想查询数据并进行处理 ID value 1 aa 3 bb 使用 Rownum
  • SQL Server 检查点

    谁能解释一下 SQL Server 何时发出检查点 from http msdn microsoft com en us library ms188748 asp http msdn microsoft com en us library
  • 缓慢变化的维度 - 什么是 Pure type 6 实现

    我试图理解纯类型 6 SCD 实现WIKI http en wikipedia org wiki Slowly changing dimension主要说了三点 如果维度可能发生变化 每个时间片都有一个类型 2 代理键可能会导致问题 纯 T
  • 按日期和时间降序排序?

    全部 我想显示特定 id 最后输入的 5 条数据 我的sql查询是 SELECT id name form id DATE updated at as date FROM wp frm items WHERE user id 11 form
  • 导出数据库的 CREATE 脚本

    假设我已经在 pgAdmin 中创建了一个数据库 但我想导出一个 CREATE sql 文件 我将如何生成转储 以下是如何使用 pgAdmin 创建一个架构脚本 该脚本可以与 PostgreSql 数据库架构比较工具 例如apgdiff h
  • 将 SQL 查询的 SELECT 子句解析为 PHP 数组

    这更多的是用于分析 PHP 中的查询before它被发送到服务器 我这样做的原因非常复杂 所以我不想深究其原因 在 PHP 中 我需要将字段选择存储到 PHP 数组中 以这个查询为例 SELECT user id username DATE
  • Android 和 Azure 移动服务:使用 invokeAPI 返回记录集

    我正在尝试一些非常简单的事情 我有一个名为 missingvehiclesfrominventoryjob 的自定义 API 它只是从标准 SQL 查询返回记录集 我可以在我的 WinForms 和 Windows Phone 应用程序中轻
  • 如何在 JPA/Hibernate 中执行本机 SQL 脚本?

    我有一个带有数据库转储的 SQL 脚本 我如何使用 Hibernate 执行它EntityManager 我这样尝试过 EntityManager manager getEntityManager Query q manager creat
  • NHibernate 排序(SQL 作为第二个选项)

    我正在使用 NHibernate 作为我的 ORM 并且正在尝试对一些数据进行排序 数据需要分页检索 我的请求表中的两列是 UrgencyID 和 CreateDate UrgencyID 是包含静态数据的 Urgency 表的 FK 1

随机推荐

  • 防止从 iCloud 中的应用程序备份

    The way apple storage guidelines is creating more problem for me because most of the data i am maintaining from the Docu
  • PHP递归获取字符串的所有可能性

    这是我获得所有可能性的代码 seq 1 d seq 2 f seq 3 w seq 4 s for i 1 i lt 5 i s length 1 seq i c1 for i2 i 1 i2 lt 5 i2 s length 2 seq
  • VB.NET 图片框之间的碰撞

    我正在尝试制作一个简单的游戏 我需要知道 picturebox1 我的角色 是否与其他 picturebox 墙壁 发生碰撞 我已经弄清楚了如何做到这一点 但它仅适用于我的角色和其他 1 个图片框 例如 If picturebox1 bou
  • 在模态中将 Jquery 变量传递给 php

    我正在打印图片和姓名 在网格视图中 用户将能够单击图片或名称 这将打开一个模式 其中包含所单击的图片 名称的标题 将相同
  • javascript/jQuery setInterval/clearInterval

    我正在使用 setInterval 来检查 p html 段落 是否具有特定的文本值 如果有的话我想清除间隔并继续代码流 我在 jQuery 插件中使用它 所以如果段落有 tat 文本值 我想清除间隔 然后继续使用回调函数 所以我尝试了这样
  • 如何在 DB2 中查找表的主键的名称和值

    如何找到表的主键列名和值 我尝试在 SYSCAT 表中查找 但找不到任何相关内容 这应该为您提供大型机上所需的内容 http publibz boulder ibm com cgi bin bookmgr OS390 BOOKS DSNSQ
  • 扩展 woocommerce Rest api

    我想扩展 woocommerce Rest api 以包含其 预订 扩展插件的数据 目前此扩展没有其余 api 提供的默认端点 到目前为止 我已经创建了一个插件 并添加了以下代码 add filter woocommerce rest pr
  • 获取 Recycler View 上单击的项目的位置

    我已经实施了RecyclerView而且效果很好 我有一个ArrayList其中包含回收器视图的数据 每个项目的布局都很复杂 它包含两个frameLayout Framelayout1 包含一个图像和一个文本 framelayout2 包含
  • 不允许使用 HTTP 动词 POST 来访问路径“/”

    整个错误 Server Error in Application The HTTP verb POST used to access path is not allowed Description An unhandled exceptio
  • 多处理时在哪里调用 join()

    在 Python 中使用多处理时 我通常会看到以下示例 join 函数在每个进程实际创建的单独循环中调用 例如 这个 processes for i in range 10 p Process target my func processe
  • 如何找到数组中的第一个空闲键

    我们都知道 数组实际上是 PHP 中的有序树 鉴于此 数组索引 整数键 不需要遵循任何严格的顺序 甚至根本不需要存在 所以 给定一个像这样的数组 array 1 gt A 5 gt B 2 gt C 3 gt D 6 gt E 0 gt F
  • 一旦超出索引,C# 将数组索引值循环回数组开头

    我希望创建一个如下所示的程序 c 顺便说一句 int arr new int 9 some code that puts values 1 0 or 2 in each array element for int i 0 i lt arr
  • 如何在 bash 中使用 getopts 的示例

    我想打电话myscript文件以这种方式 myscript s 45 p any string or myscript h should display help myscript should display help 我的要求是 get
  • 如何在 Ubuntu 操作系统上使用 cron 作业每天运行 php 脚本

    运行命令我正在使用 ubuntu 12 和 lamp 服务器 我想每 1 小时运行一次 php 脚本 我已经创建了一个 crontab 来执行此操作 如果我使用命令 crontab l 检查我的 cron 列表 它会显示如下 Edit th
  • 如何在 R 中将数据帧上传到 ndtv?

    我的目标是使用 R 中的三个包进行动态可视化 ndtv network and networkDynamic包 我创建了一个dataset根据此示例数据集排序的信息网络动态时间可视化研讨会 第 7 页 根据网络动态手册第49页 上传数据集并
  • 在模式弹出窗口中打开外部网站

    我知道 a href http www example com target blank Click here a 打开链接在新标签中 Chrome 和 Firefox 中的默认行为 a href http www example com
  • 通过 jQuery GET 强制“另存为”对话框

    我在下面的 test php 文件代码中调用 jQuery GET 我试图让脚本在生成的 test ini 文件上弹出 另存为 对话框 以允许将其保存在本地 然而 虽然我可以将结果回显给 jQuery 但我似乎无法弹出 另存为 对话框 更新
  • 如何将一系列单元格存储到数组中?

    如果我在单元格 A1 A150 中有一个数据列表 但数量可能会有所不同 有没有办法将其推入数组 而无需单独查看每个单元格来确定它是否为空 这样做超出了我的执行时间 我需要一种更快的方法来存储数据并在数据到达空单元格时停止 以下是我目前的做法
  • 当didUpdateToLocation发生时,iphone在后台发送邮件

    我开始工作 skpsmtpmessage http code google com p skpsmtpmessage 这样我就可以在前台发送邮件 现在我希望在 didUpdateLocation 发生时通过 skpsmtpmessage 在
  • 特定时间段内的多笔交易,受日期范围限制

    我有一个包含交易 人员 交易日期 物品等的数据库 每次有人购买商品时 交易都会存储在表中 如下所示 personNumber TransactionNumber TransactionDate ItemNumber 我想要做的是找到从 20