假设我有两个表,其中一个表包含名为column_period的以下列:
tenant_trading_name,suite_id,lease_id,building_id
另一个名为lease_period_audit,具有以下内容:
audit_date,audit_type,tenant_trading_name,suite_id,lease_id,building_id
每次在lease_period上更新记录,并在lease_period_audit上进行记录,状态为“已更新”。我正在尝试查找仅对tenant_trading_name字段进行的所有更新,但没有取得任何成功。到目前为止,我有以下内容:
select lpa.*
from property.lease_period_audit lpa
inner join property.lease_period lp on lpa.suite_id = lp.suite_id and lpa.lease_id = lp.lease_id and lpa.building_id = lp.building_id
where audit_type = 'Updated'
and lp.tenant_trading_name <> lpa.tenant_trading_name
order by 1 desc
我的思想过程中的缺陷在哪里?如何做到这一点/我应该如何考虑呢?
假设审核表还记录了lease_period
主键列(lp_id
为简便起见,在此引用),则可以尝试以下方法:
寻找到的所有行audit_type
的'Updated'
。
对所有行进行排序,audit_date
然后对进行分区lp_id
。
通过对进行audit_date
分区,对行进行排名lp_id, suite_id, lease_id, building_id
。
获取两个排名之间的差异。
再次按排列行audit_date
,现在按划分行lp_id, suite_id, lease_id, building_id, (ranking_difference)
。
输出最后一个排序值等于或大于2的所有行。
的前四个步骤导致一个行组,其中每个组的连续(以升序audit_date
),用相同的值的行suite_id, lease_id, building_id
对于相同lp_id
将由作为排名#2&#3之间的差计算出的值被唯一区分。
在该组中,从第二行开始的每一行将与上一行有所不同,仅在于的值tenant_trading_name
,这正是我们所需要的。因此,考虑到我们刚刚获得的“组ID”,我们再次对行进行排名,然后返回排名为2或更高的每一行。
这是一个大概的实现:
WITH marked AS (
SELECT
*,
grp = ROW_NUMBER() OVER (PARTITION BY lp_id
ORDER BY audit_date)
- ROW_NUMBER() OVER (PARTITION BY lp_id, suite_id, lease_id, building_id
ORDER BY audit_date)
FROM lease_period_audit
WHERE audit_type = 'Updated'
),
ranked AS (
SELECT
*,
rnk = ROW_NUMBER() OVER (PARTITION BY lp_id, suite_id, lease_id, building_id, grp
ORDER BY audit_date)
FROM marked
)
SELECT
audit_date,
lp_id,
tenant_trading_name,
suite_id,
lease_id,
building_id
FROM ranked
WHERE rnk = 2
笔记。这假定审计表仅记录实际更改,即,不能有两个具有相同主键的连续行,其中所有四个列都具有相同的值。
我有模板实体,它具有: 我正在使用postgres数据库
问题内容: 我正试图消除我的SQL技能,并需要以下查询的帮助。我当前使用的数据库是mysql。 我想检索所有同时分配了’tag2’和’tag4’的抽认卡。根据现有表的内容(如以下摘录所示),查询应返回两行:FlashCard_ID 1和2。 我将如何制定此查询?自从我不得不做这样的事情已经有一段时间了。 问题答案:
接口说明 审核用户的注册申请 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/user/1.0.0/check 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 guid string form 是 用户ID status int form 是 用户状态[0:未审核;1:已审核] 响应字段说明 无 响应
如欲对系统中各运行支持库内的命令、库定义数据类型、库定义常量等等信息进行查找,请在易系统启动后使用以下方法之一: 直接在工作夹内的支持库夹中单击对应的所欲查找其信息的项目,此时所有的相关信息将会显示在系统的提示夹或者状态行中,如下图,光标处; 如果欲将这些信息提取出来打印或者以后阅读,请在相应项目上单击鼠标右键,在所弹出的菜单中选择“拷贝帮助文本到剪贴板”或者“写帮助文本到文件”功能输出与该项
问题内容: 我想从t1中获取名称,并在t2中获得与ID在t1上相同的行数。 到目前为止,我已经掌握了上述内容,但是如果t2中没有匹配的行,它将不会返回任何数据。如果没有行,则我希望将其设置为0(或NULL),并且名称仍然返回。 编辑: 我希望能够按降序排序。(或ASC)可行吗? 问题答案: 这应该为您工作: 左联接确保您拥有t1中的所有行,而COUNT(。)使其仅计算t2.id不为null的记录(
我正在使用Hibernate恩维尔斯来审计实体。有可能获得实体的所有版本/修订版,如下所示: 但这需要花费太多时间,因为它将所有表连接在一起(在此示例中为 rev、soup_aud ingredients_aud)。我只需要Soup_AUD的值。 如何使用自定义查询从审计表中选择值? 汤.java: 成分.java: