首页 > 解决方案 > 在同一个表中比较一列

问题描述

我有一张包含这些寄存器的表格

ColumnA     ColumnB
apple       180725
banana      180725
apple       180724

我只想获取昨天和两天前出现的寄存器列A。

我怎么能在sql中做到这些。有两张桌子很容易,但一张桌子如何,我不知道如何制作。

谢谢和对不起我的英语!

标签: sqloracle

解决方案


日期是 B 列

使用 DATE 数据类型保存日期是一种很好的做法。在 Oracle 中,我们可以对日期进行算术运算,因此实际上不需要将它们存储为数字,尤其是没有世纪的数字。

无论如何,自连接与任何其他连接一样,使用表别名来区分它们:

select t1.columnA
from your_table t1
     inner join your_table t2
     on t1.columnA = t2.columnA 
where t1.columnB = to_number(to_char(sysdate,'yymmdd'))-1
and  t2.columnB = to_number(to_char(sysdate,'yymmdd'))-2

这也可以

and  t2.columnB = t1.columnB - 1

如果columnB是 DATE 列,则 WHERE 子句将是:

where t1.columnB = trunc(sysdate)-1
and  t2.columnB = trunc(sysdate)-2

推荐阅读