postgresql 如何过滤表中数据集的差异

b1payxdu  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(153)

我对SQL比较陌生,我有一个简短的问题。我已经在stackOverflow中搜索了类似的问题,但没有找到任何东西。我已经创建了一些视图。这些观点从一个版本到另一个版本都有变化。为了使客户更容易进行迁移,我想过滤两个版本之间列的data_types的差异。目前我正在使用PostgreSQL版本11.16
我有一个表,看起来像这样:
| 版本编号|安装时间戳|列名|数据类型|
| - -----|- -----|- -----|- -----|
| D1| 2023-06-02 06:42:14.531588| t0801_01|整数|
| D1| 2023-06-02 06:42:14.531588| t0801_04|性状变异|
| D2| 2023-07-02 06:42:14.531588| t0801_01|整数|
| D2| 2023-07-02 06:42:14.531588| t0801_04|整数|
现在,我想找到两个版本之间data_type列的值发生了更改的所有行。所以我期待以下结果:
| 版本编号|安装时间戳|列名|数据类型|
| - -----|- -----|- -----|- -----|
| D1| 2023-06-02 06:42:14.531588| t0801_04|性状变异|
| D2| 2023-06-02 06:42:14.531588| t0801_04|整数|
我试过的是:
SELECT DISTINCT ON (column_name, data_type) column_name, data_type FROM mytable WHERE versionsnummer = 'D1' OR versionsnummer = 'D2';
不幸的是,我没有得到预期的结果与此查询。你能告诉我我哪里做错了吗?非常感谢:)

2g32fytz

2g32fytz1#

我认为你可以通过“自我加入”来实现这一点。在“column_name”列上连接表本身。
下面是代码:

SELCT t1.versionsnummer, t1.install_timestamp, t1.column_name, t1.data_type
FROM [your_table_name] t1
JOIN [your_table_name] t2 ON t1.column_name = t2.column_name
WHERE t1.data_type <> t2.data_type;

示例:如果选择表中的所有列,则将获得:
| 版本编号|安装时间戳|列名|数据类型|
| - -----|- -----|- -----|- -----|
| D1| 2023-06-02 06:42:14.531| t0801_04|字符变化|
| D2| 2023-07-02 06:42:14.531| t0801_04|整数|
测试here

  • 不要忘记在此查询中更改表名!

相关问题