AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-93156

skoczo's questions

Martin Hope
skoczo
Asked: 2016-04-27 06:21:43 +0800 CST

使用草稿选项对数据库中的实体进行版本控制,选择查询

  • 2

我有 postgresql 数据库,我在其中保存 jee 应用程序的数据。用户可以编辑这些数据而无需创建新版本的实体(草稿)。在编辑期间,实体被复制为草稿(版本设置为 -1),编辑后用户可以将所有更改保存为新版本。我的问题是创建适当的 sql 查询以按版本获取数据,而不是提取所有数据并在应用程序中执行。

表架构:

id(uniq), field_id,version,otherFields....

id 是唯一值并自动递增。当用户开始编辑时,将使用 field_id=parent.id 创建新字段。所以我可以使用group by field_id提取所有版本的字段

情况1

我想获取当前版本,这意味着版本字段或版本的最大值设置为 -1。

案例二

我想获得特定版本。这并不容易,因为如果字段未被编辑(以节省空间),数据库中的数据不会更改。例如,字段a是使用版本 1创建的,然后对其他字段进行了更改。当前的全局版本是 7,但是字段a在数据库中仍然有一个版本为 1 的条目(该字段未被编辑)。因此,要提取不同于当前版本的特定版本,我需要获取MAX(version) where version<=:selected_version

示例数据:

id(uniq),field_id,version
1,1,1
3,1,7
55,1,-1
53,53,14

field_id=1 的实体有 2 个版本和草稿(用户正在编辑它)。

field_id=53 的实体只有一个版本,没有草稿。

我希望我对问题的解释是可以理解的。你能帮我做那些sql查询吗?它可以是两个查询,一个用于带有草稿的实际版本,另一个用于旧版本。

情况2可能的解决方案

我认为我可以使用此类查询提取特定版本

select field_id, max(version) ver from field_mappings where version<4 and version!='-1' group by field_id

我不知道为什么我不能提取 id。当我将查询更改为

select *, max(version) from field_mappings where version<4 and version!='-1' group by field_id

然后我得到了错误

ERROR: column "field_mappings.id" must appear in the GROUP BY clause or be used in an aggregate function
SQL: 42803

并且仍然不知道如何为草稿添加大小写(最大(版本)或版本=-1)。

postgresql version-control
  • 1 个回答
  • 589 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve