我登录到 Windows 计算机并通过 GlobalProtect VPN 连接到另一个环境以连接 SQL Server。SQL Server 配置为仅允许 Windows 身份验证。但是,Windows 计算机位于一个域中,而 SQL Server 位于另一域中。当我尝试连接时,它会抛出错误:
目标主体名称不正确。无法生成 SSPI 上下文。
(框架 Microsoft SqlClient 数据提供程序)
这就是我试图实现这一目标的方式:
但它返回错误为:
详细信息如下:
我登录到 Windows 计算机并通过 GlobalProtect VPN 连接到另一个环境以连接 SQL Server。SQL Server 配置为仅允许 Windows 身份验证。但是,Windows 计算机位于一个域中,而 SQL Server 位于另一域中。当我尝试连接时,它会抛出错误:
目标主体名称不正确。无法生成 SSPI 上下文。
(框架 Microsoft SqlClient 数据提供程序)
这就是我试图实现这一目标的方式:
但它返回错误为:
详细信息如下:
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GroupAggregate (cost=21267.11..21286.98 rows=461 width=31) (actual time=1.711..1.712 rows=1 loops=1)
Group Key: *
\-\> Sort (cost=21267.11..21268.91 rows=719 width=35) (actual time=1.564..1.591 rows=719 loops=1)
Sort Key: *
Sort Method: quicksort Memory: 69kB
\-\> Nested Loop (cost=70.03..21233.00 rows=719 width=35) (actual time=0.483..1.454 rows=719 loops=1)
\-\> Index Scan using * (cost=0.28..8.30 rows=1 width=27) (actual time=0.017..0.018 rows=1 loops=1)
Index Cond: *
\-\> Bitmap Heap Scan on measurements m (cost=69.75..21213.91 rows=719 width=32) (actual time=0.240..0.994 rows=719 loops=1)
Recheck Cond: *
Filter: *
Rows Removed by Filter: 5241
Heap Blocks: exact=50
\-\> Bitmap Index Scan on * (cost=0.00..69.57 rows=6018 width=0) (actual time=0.224..0.224 rows=5960 loops=1)
Index Cond: *
Planning Time: 0.697 ms
**Execution Time: 1.766 ms**
(17 rows)
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GroupAggregate (cost=21267.11..21286.98 rows=461 width=31) (actual time=0.897..0.898 rows=1 loops=1)
Group Key: *
\-\> Sort (cost=21267.11..21268.91 rows=719 width=35) (actual time=0.795..0.831 rows=719 loops=1)
Sort Key: *
Sort Method: quicksort Memory: 69kB
\-\> Nested Loop (cost=70.03..21233.00 rows=719 width=35) (actual time=0.178..0.718 rows=719 loops=1)
\-\> Index Scan using * (cost=0.28..8.30 rows=1 width=27) (actual time=0.004..0.005 rows=1 loops=1)
Index Cond: *
\-\> Bitmap Heap Scan on measurements m (cost=69.75..21213.91 rows=719 width=32) (actual time=0.081..0.457 rows=719 loops=1)
Recheck Cond: *
Filter: *
Rows Removed by Filter: 5241
Heap Blocks: exact=50
\-\> Bitmap Index Scan on * (cost=0.00..69.57 rows=6018 width=0) (actual time=0.073..0.073 rows=5960 loops=1)
Index Cond: *
Planning Time: 0.336 ms
**Execution Time: 0.929 ms**
(17 rows)
QUERY PLAN
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
GroupAggregate (cost=21267.11..21286.98 rows=461 width=31) (actual time=0.873..0.873 rows=1 loops=1)
Group Key: *
\-\> Sort (cost=21267.11..21268.91 rows=719 width=35) (actual time=0.794..0.813 rows=719 loops=1)
Sort Key: *
Sort Method: quicksort Memory: 69kB
\-\> Nested Loop (cost=70.03..21233.00 rows=719 width=35) (actual time=0.168..0.717 rows=719 loops=1)
\-\> Index Scan using * (cost=0.28..8.30 rows=1 width=27) (actual time=0.004..0.004 rows=1 loops=1)
Index Cond: *
\-\> Bitmap Heap Scan on measurements m (cost=69.75..21213.91 rows=719 width=32) (actual time=0.071..0.457 rows=719 loops=1)
Recheck Cond: *
Filter: *
Rows Removed by Filter: 5241
Heap Blocks: exact=50
\-\> Bitmap Index Scan on *
(cost=0.00..69.57 rows=6018 width=0) (actual time=0.063..0.063 rows=5960 loops=1)
Index Cond: *
Planning Time: 0.304 ms
**Execution Time: 0.903 ms**
(17 rows)
\---------------------------------------------------------------------------------------------------------------
Time (mean ± σ): **98.1 ms** ± 28.1 ms \[User: 30.7 ms, System: 11.1 ms\]Range (min … max): 75.6 ms … 129.5 ms 3 runs
\---------------------------------------------------------------------------------------------------------------
我正在使用 hyperfine 对 PostgreSQL 中的查询性能进行基准测试。我使用--runs 3
选项运行了三遍。正如您所看到的,我运行查询的所有 3 次的执行时间分别花费了 1.766、0.929 和 0.903 毫秒。我的问题是,为什么平均值 = 98.1 毫秒?这句话代表什么意思呢?因为执行时间在 0.9 ms - 1.7 ms 之间是没有任何意义的,而它们的平均值是 98.1 ms。我测试在 Postico 中执行相同的查询,花费了 0.903 毫秒。我只是好奇如果平均值不代表执行平均时间,它代表什么。
我一直在互联网上搜索在 MacOs 苹果硅芯片(基于 Arm 的处理器)中安装 sqlplus 的最佳方法。请指导我一些最简单的方法来做到这一点。
我看到很多关于在基于 x64 intel 的处理器中安装 sqlplus 的文章,但没有在基于 arm64 的处理器上安装 sqlplus。
有关系统的更多详细信息
芯片 Apple M1 Pro Mac OS 版本 Mac OS Sonoma 14.3.1
我从 SQL Server 2014 迁移到 SQL Server 2022。
我首先从 SQL Server 2014 实例创建完整备份,然后运行RESTORE DATABASE
下面所示的脚本来进行测试迁移。一切都按计划进行。
一周后,我删除了新服务器上的所有数据库,再次将 SQL Server 2014 备份到相同的文件名,然后再次运行以下脚本。然而,SQL Server 2022 并没有恢复该文件的最新版本,而是仅恢复了一周前的数据。只需右键单击用户界面并从那里执行“恢复”即可恢复数据的当前版本。
有人可以帮我理解为什么这是为了防止将来发生这种情况吗?
BACKUP DATABASE db1 TO DISK = db1.BAK;
RESTORE DATABASE [db1]
FROM DISK = N'\\sql2014\migration\db1.BAK' WITH FILE = 1,
MOVE N'db1_data' TO N'D:\Data\db1_data.mdf',
MOVE N'db1_log' TO N'D:\Log\db1_log.ldf',
NOUNLOAD,
REPLACE,
STATS = 5;
GO
我正在创建一个具有分区逻辑的表。下面是配分函数和方案:
DECLARE @StartDate datetime2 = '20230401';
DECLARE @YearlyQuartersPartitionFunction nvarchar(max) = N'CREATE PARTITION FUNCTION YearlyQuartersPartitionFunction (datetime2) AS RANGE RIGHT FOR VALUES (';
DECLARE @i datetime2 = @StartDate;
WHILE @i < '20300101'
BEGIN
SET @YearlyQuartersPartitionFunction += '''' + CAST(@i as nvarchar(10)) + '''' + N', ';
SET @i = DATEADD(MM, 3, @i);
END
SET @YearlyQuartersPartitionFunction += '''' + CAST(@i as nvarchar(10))+ '''' + N');';
--PRINT @YearlyQuartersPartitionFunction;
EXEC sp_executesql @YearlyQuartersPartitionFunction;
GO
如果您运行 bloc 来创建分区函数并取消注释 PRINT 语句,您将看到以下内容:
CREATE PARTITION FUNCTION YearlyQuartersPartitionFunction (datetime2) AS RANGE RIGHT FOR VALUES ('2023-04-01', '2023-07-01', '2023-10-01', '2024-01-01', '2024-04-01', '2024-07-01', '2024-10-01', '2025-01-01', '2025-04-01', '2025-07-01', '2025-10-01', '2026-01-01', '2026-04-01', '2026-07-01', '2026-10-01', '2027-01-01', '2027-04-01', '2027-07-01', '2027-10-01', '2028-01-01', '2028-04-01', '2028-07-01', '2028-10-01', '2029-01-01', '2029-04-01', '2029-07-01', '2029-10-01', '2030-01-01');
-- Partition scheme that maps to the PRIMARY filegroup
CREATE PARTITION SCHEME YearlyQuartersPartitionScheme
AS PARTITION YearlyQuartersPartitionFunction
ALL TO ([PRIMARY]);
我正在使用此方案使用以下 DDL 创建一个表:
CREATE TABLE [dbo].[MyTable](
[Id] [uniqueidentifier] NOT NULL,
[CompanyId] [uniqueidentifier] NOT NULL,
[AddedUtc] [datetime2](7) NOT NULL,
[IsTest] [bit] NOT NULL
) ON YearlyQuartersPartitionScheme(AddedUtc) ON PRIMARY;
GO
ALTER TABLE [dbo].[MyTable] ADD CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
GO
CREATE NONCLUSTERED INDEX [IX_MyTable_CompanyId] ON [dbo].[MyTable]
(
[CompanyId] ASC
)WITH (STATISTICS_NORECOMPUTE = OFF, DROP_EXISTING = OFF, ONLINE = OFF, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
GO
ALTER TABLE [dbo].[MyTable] ADD DEFAULT (CONVERT([bit],(0))) FOR [IsTest]
GO
ALTER TABLE [dbo].[MyTable] WITH CHECK ADD CONSTRAINT [FK_MyTable_Companies_CompanyId] FOREIGN KEY([CompanyId])
REFERENCES [dbo].[Companies] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[MyTable] CHECK CONSTRAINT [FK_MyTable_Companies_CompanyId]
GO
如果我检查为此表创建的分区,我会发现所有分区都具有相同的partition_number 值。这是错误的。
如果我做错了什么,有人可以指出吗?
我注意到分区方案的 data_space_id 与表上索引的 data_space_id 不匹配。
我什么时候需要重建索引。
我们在数据仓库位图索引中使用。如果我截断表并且没有行,然后插入新行,据我所知应该重建索引,因为这是有道理的。
当更新或插入或删除新行时总是如此,无论是使用单个语句还是使用合并语句然后 Oracle 自动更新所有类型的索引?
我已将记录添加到 SQL Server 数据库表中。该表已建立主键,自动增量标识种子设置为“是”。这样做主要是因为对于 SQL Azure,每个表都必须有一个主键和一个声明的身份。
然而,因为我需要从表中删除某些项目,这些表的标识种子将被破坏,索引列(自动生成,增量为 1)也是如此。
删除条目后如何重置标识列,使列的序列按数字升序排列?
标识字段不用作数据库中任何地方的外键。
CREATE TABLE IF NOT EXISTS `users` (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL,
org_id int NOT NULL,
phonenum int NOT NULL
) ENGINE=INNODB;
INSERT INTO `users` VALUES (1, 'USER','abcd', 1, 1);
这会引发错误:第 13 行出现错误 1062 (23000):键“users.PRIMARY”的重复条目“1”
谢谢您的帮助!
我们有一个带有 MySQL DB(在 AWS RDS 上)的 Ruby on Rails 应用程序。我们的一些表有大约 1 亿条记录,而且这个数字每个月都在迅速增加。这些表中的大多数记录都处于非活动状态,并且仅在用户可以访问的某些报表中偶尔访问。
我们现在面临几个问题:
我们的要求是:
因此,我们计划执行以下操作:
我们的问题是这种方法是否是传统的,是否有更好的方法来实现我们想要的。任何输入将不胜感激。
问题问:
给定两个关系 A 和 B,它们都超过属性 x 和 y。在bag语义下编写一个查询,如果B为空则返回A,否则返回B
我解释这个问题的方式是“空的”意味着关系中没有元组。
这个问题是在一般意义上给出的,因此没有与每个关系相关联的值。
希望有人可以指导我开始。
编辑:到目前为止,我看到如果B为空,则A union B会产生正确的答案。但是在B不为空的情况下,我们需要取与B的交集,即(A union B) intersect B但这在B为空时不起作用
编辑:在A和B都是非空的情况下举一个例子:
答:((1,1),(2,2))
B : ((3,3), (4,4))
查询应返回: ((3,3), (4,4))
但是,如果我们将B更改为: ()
查询应返回: ((1,1), (2,2))
我只是想不通集合运算符的可能组合可以让我实现这一目标。
编辑:这是一个链接,基本上是用于教我们关系代数的确切幻灯片,大约 3/4 的方式定义了我的问题使用的袋子上的代数。课堂上使用的教科书是 Ramakrishnan 和 Gehrke 第 3 版第 100 页的“数据库管理系统”,但这是可选文本,我们被告知我们的主要参考资料应该是幻灯片。
为了浓缩幻灯片,我们的代数有选择、投影、重命名、笛卡尔积、并集和差集。所有其他操作都可以由这些操作组合而成。
为了解决问题的根源,我上学期为我的数据库模块准备了一张旧问题表,我最近重新审视了它,为我即将进行的一个项目修改了关系代数,但这个问题困扰了我好几天。提出问题的讲师已经离开,很遗憾我不能问他们。
我需要创建一个数据库的事务日志备份,文件名以某种方式递增编号,每小时一个,全天。
例子:
上午 9 点 - mydb 01 .trn
上午 10 点 - mydb 02 .trn
上午 11 点 - mydb 03 .trn
等等
我不希望将日期或时间附加到这些内容,因为我们的 SAN 快照将负责版本控制。这些名称每天都必须相同。
我想这样做,而不必为一天中的每个小时创建一个工作。我只是无法使用基本的 T-SQL 来解决这个问题,这是我 T-SQL 技能的限制。我知道我可以创建一堆带有标准备份命令的作业,如下所示,具有不同的文件名和预定时间,但是必须有更好的方法。
BACKUP LOG [mydb] TO DISK = N'X:\SQLBackups\mydb01.trn.trn'
,NAME = N'mydb_backup'
,COMPRESSION
,STATS = 10
,CHECKSUM
GO
我的应用程序需要在用户选择的时间每天向他们发送一封电子邮件,时区也由用户自己定义。
存储 HH:MM + 时区的最佳方式是什么?知道我的服务器位于特定时区,我如何有效地查询这个?
我现在的表是:
CREATE TABLE "reminder" (
"id" SERIAL UNIQUE PRIMARY KEY,
"user" INT NOT NULL REFERENCES "user"(id) ON DELETE CASCADE,
"scheduled_at TIMESTAMPTZ NOT NULL,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
)
我不确定是否TIMESTAMPTZ
是最有效的方法,因为它存储整个时间戳,而不仅仅是HH:MM
我有 4 个表(每个表大约 75 列),但它们共享具有相同名称的列:
表大师_产品
Master_Product.PD_Prof_21
表产品_结构
Product_Structure.PD_Prof_21
我正在做左连接;发生的情况是,当它将它们带到后端(php)时,它们会被覆盖……预期为 2 PD_Prof_21,但在 php 中只有一个是 retrive。
基于这个解决方案(它不能解决我的场景,因为我有大约 300 列)https://stackoverflow.com/a/10530252/4717133
我不相信使用超过 300 列的别名的想法......我知道列中的别名类似于:
SELECT Columns as column1 ... // this would be very heavy to do for each column ...
此其他选项不会分隔结果集中的表
SELECT
Master_Product.*,
Product_Structure.*,
Supplier_Product.*,
Product_Price.*,
或者至少在 php 中我有问题,事实证明在 300 列中我只收到那些不重复的列,如果重复列,它只会显示最后一个具有最后一个值的列。
第一个疑问
所以我想知道mysql中是否有任何方法允许自动为结果集查询中的所有列添加前缀,例如:
SELECT PREFIX ('Master_', Master_Product. *), PREFIX ('Structure_', Product_Structure. *) ...
并在 PHP 中访问:
Master_PD_Prof_21
Structure_PD_Prof_21
用于检索信息的 PHP 脚本:
连接
function Open_Con_DB2($dbUsing) {
$dblink = mysqli_connect(DB_HOST, DB_USERNAME, DB_PASS, DB_PRE . $dbUsing);
if ($dblink) {
$dblink->query("SET NAMES 'utf8'"); # Enlace de Coneccion UTF-8
return $dblink;
} else {
#No conviene mostrar errores internos
#Cámbialos por mensajes personalizados en producción
die( 'Error de Conexión ('
.mysqli_connect_errno(). ') '
. mysqli_connect_error()
);
return null;
}
}
获取信息。
function BDquery2($dbquery, $dbUsing) {
$dblink = $this->Open_Con_DB2($dbUsing);
if ($dblink) {
if ( $datos = mysqli_query($dblink, $dbquery) ) {
$outPut=array();
while ($row = mysqli_fetch_assoc($datos)) {
$outPut[]=$row;
}
} else {
$outPut['error']=$this->errorDB($dblink);
}
$this->Close_Con_DB($dblink);
} else {
$outPut['error']='No hay conexión';
}
return $outPut;
}
查询已执行:( 对不起,数据库是西班牙语 XD)
SELECT
Master_Producto.*,
Producto_Estructura.*,
Producto_Proveedor.*,
Producto_Precio.*,
FROM Master_Producto
LEFT JOIN(SELECT * FROM Producto_Estructura) AS Producto_Estructura ON ( Master_Producto.Prod_Code = Producto_Estructura.Prod_Code AND Master_Producto.Prod_PF = Producto_Estructura.Prod_PF)
LEFT JOIN(SELECT * FROM Producto_Proveedor) AS Producto_Proveedor ON ( Master_Producto.Prod_Code = Producto_Proveedor.Prod_Code AND Master_Producto.Prod_PF = Producto_Proveedor.Prod_PF)
LEFT JOIN(SELECT * FROM Producto_Precio ORDER BY Prod_DateUpd DESC) AS Producto_Precio ON ( Master_Producto.Prod_Code = Producto_Precio.Prod_Code AND Master_Producto.Prod_PF = Producto_Precio.Prod_PF)
第二个疑问
奇怪的是,PHPmyadmin 如果它向我显示完整的结果......它为每个表显示 1 个部分......但我不能在 php.ini 中自己做。此示例是执行相同查询管的结果,该查询管在图像中对其进行裁剪,以便他们欣赏列的重复。
我已经在我的 Windows 10 OS 笔记本电脑中安装了 PogtgreSQL 版本 13 并安装了 pgAdmin4。
我在 pg_hba.conf 和 pg_ident.conf 中进行了以下更改以实现 SSPI 身份验证。但是在连接到数据库时收到“致命:连接到 PosgreSQL 时用户“postgres”的 SSPI 身份验证失败”消息
pg_hba.conf
host all all 127.0.0.1/32 sspi map=SSPI
host all all ::1/128 sspi map=SSPI
pg_ident.conf
#MAPNAME SYSTEM-USERNAME PG-USERNAME
SSPI admin@BEUNA-PC admin
日志文件:
2021-09-05 22:11:59.350 IST [11208] LOG: starting PostgreSQL 13.4, compiled by Visual C++ build 1914, 64-bit
2021-09-05 22:11:59.352 IST [11208] LOG: listening on IPv6 address "::", port 5432
2021-09-05 22:11:59.352 IST [11208] LOG: listening on IPv4 address "0.0.0.0", port 5432
2021-09-05 22:11:59.398 IST [8948] LOG: database system was shut down at 2021-09-05 22:11:57 IST
2021-09-05 22:11:59.424 IST [11208] LOG: database system is ready to accept connections
2021-09-05 22:12:36.083 IST [16332] LOG: no match in usermap "SSPI" for user "postgres" authenticated as "admin@BEUNA-PC"
2021-09-05 22:12:36.084 IST [16332] FATAL: SSPI authentication failed for user "postgres"
2021-09-05 22:12:36.084 IST [16332] DETAIL: Connection matched pg_hba.conf line 96: "host all all ::1/128 sspi map=SSPI"
我的“答案”表中有一个名为“值”的列。
| value |
|---------|
| [1,2] |
| [1] |
| [1,2,3] |
“值”的类型是“jsonb”。
我想得到每一行中每个数组的平均值:
SELECT avg(value) AS avg_value
FROM answers
但这不起作用,因为 avg() 不是 jsonb 函数。我试过了:
SELECT avg(value::integer[]) as avg_value
FROM answers
即尝试将 jsonb 数组转换为整数数组,然后取平均值,但我收到以下错误:“无法将类型 jsonb 转换为整数 []。null”。
有任何想法吗?
我需要一个查询如何仅列出授予数据库中每个用户的所有系统权限(而不是对象权限)。我需要列出的系统权限,无论他们通过角色授予还是直接授予。
谢谢
您好我收到此错误:
当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。
这是我当前的 SQL 查询:
DECLARE @UgpEntry VARCHAR(50)
SELECT @UgpEntry = UgpEntry FROM OITM t1 WHERE t1.ItemCode='CID-11418272385'
IF (@UgpEntry = -1)
SELECT
t1.ItemCode as sapitemcode
, t1.CodeBars as Barcode
, t1.ItemName as description
,LEFT(t1.ItemName,20) as short_description
,
(select max(p.Price)
from ITM1 p
where p.ItemCode = t1.ItemCode
and p.PriceList = 1) as [price_1]
,
(SELECT T0.[ItemCode], T2.[U_NAME] as 'User that created Item', t0.updatedate
FROM AITM T0 inner join OUSR T2 on t0.usersign = t2.internal_K
WHERE T0.[ItemCode] = t1.ItemCode
group by T0.[ItemCode], T2.[U_NAME], t0.loginstanc, t0.updatedate
having t0.loginstanc = (select min(loginstanc) from AITM where itemcode = t0.loginstanc)),
CASE t1.VatGourpSa when 'V0' THEN 4 when 'V1' THEN 1 WHEN 'V2' THEN 2 WHEN 'V3' THEN 3 END as TaxCode,t1.U_GRUPOA, t1.U_GRUPOB, t1.U_GRUPOC, t1.UgpEntry
FROM OITM t1
WHERE t1.ItemCode='CID-11418272385'
ELSE
SELECT t1.ItemCode as sapitemcode
, t1.CodeBars as Barcode
, t1.ItemName as description
,LEFT(t1.ItemName,20) as short_description
, (select max(p.Price)
from ITM9 p
where p.ItemCode = t1.ItemCode
and p.UomEntry = 1 and p.PriceList = 1) as [price_1mananitas],
(select max(p.Price)
from ITM1 p
where p.ItemCode = t1.ItemCode
and p.PriceList = 1) as [preciocajamananitas],
(select max(p.Price)
from ITM9 p
where p.ItemCode = t1.ItemCode
and p.UomEntry = 1 and p.PriceList = 2) as [price_2cabra],
(select max(p.Price)
from ITM1 p
where p.ItemCode = t1.ItemCode
and p.PriceList = 2) as [preciocajacabra]
, CASE t1.VatGourpSa when 'V0' THEN 4 when 'V1' THEN 1 WHEN 'V2' THEN 2 WHEN 'V3' THEN 3 END as TaxCode,t1.U_GRUPOA, t1.U_GRUPOB, t1.U_GRUPOC, t1.UgpEntry
FROM OITM t1
WHERE t1.ItemCode='CID-11418272385'
我刚刚添加了这个子查询:
(SELECT T0.[ItemCode], T2.[U_NAME] as 'User that created Item', t0.updatedate
FROM AITM T0 inner join OUSR T2 on t0.usersign = t2.internal_K
WHERE T0.[ItemCode] = t1.ItemCode
group by T0.[ItemCode], T2.[U_NAME], t0.loginstanc, t0.updatedate
having t0.loginstanc = (select min(loginstanc) from AITM where itemcode = t1.ItemCode))
当我单独运行它时,我会得到这样的结果:
我想要做的是在我的主查询中添加该选择,以便在原始查询中显示为新列。所以它应该像这样在末尾出现新列(T2.[U_NAME] 和 t0.updatedate):
我错过了什么?
谢谢你
我正在尝试创建一个触发器,以防止列更新如下:
如果列值为“A”,则无法更新为“B”,如果列值为“B”,则无法更新为“A”。
CREATE OR REPLACE FUNCTION cancelled_order()
RETURNS trigger
LANGUAGE plpgsql
AS $function$BEGIN
IF OLD.status = 'Cancelled' THEN NEW.status != 'Accomplished';
END IF;
IF OLD.status = 'Accomplished' THEN NEW.status != 'Cancelled';
END IF;
RETURN NEW;
END;
$function$;
CREATE TRIGGER No_cancelled_acomplished
BEFORE UPDATE OF status
ON clinical.tb_orders
EXECUTE PROCEDURE cancelled_order();
出现的错误是:
Sintaxis error: !=
有什么想法,为什么?
我是 PostgreSQL 的新手,感觉不知所措..
我想要实现的是这样的:
年 | 描述 | 百分 |
---|---|---|
2019 | 字字字 | 0.10 |
2018 | 词词伤心 | 0.80 |
2017 | 字空字 | 0.15 |
ETC | 字字字 | 0.41 |
其中百分比是 function_A 除以 function_B** (function_A / function_B)。
到目前为止,这就是我所做的错误 - 包括来自 nbk 原始答案的代码:
该函数不应该有任何参数。
CREATE OR REPLACE FUNCTION summary_orders()
RETURNS TABLE (retyear numeric, order_desc text, percentage bigint) AS $$
DECLARE
retyear numeric DEFAULT 0;
descrip text DEFAULT 0;
percent bigint DEFAULT 0;
BEGIN
RETURN
QUERY SELECT CAST(EXTRACT(year FROM created_dt) as numeric),
order_desc as text,
ROUND(function_A(inyear,incode))::decimal / function_B(inyear) as percent
FROM orders o
WHERE EXTRACT(YEAR FROM o.creation) = inyear
AND o.order_code = incode
AND o.descrip
GROUP BY EXTRACT(year FROM o.creation), o.code
ORDER BY retyear ASC;
END;
$$
LANGUAGE plpgsql;
SELECT * from summary_code()
我的数据看起来像这样:
CREATE TABLE orders (
id INT NOT NULL,
code INT NOT NULL,
service_id INT NOT NULL,
descript CHARACTER VARYING(50),
creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
status_date TIMESTAMP,
created_user INT
);
INSERT INTO orders
(id, code, service_id, descript, creation, status_date, created_user)
VALUES
(100,2394,558151,'Requested not today','2019-06-16 11:12','2019-06-18 14:08',1),
(100,2394,558151,'Fulfilled blue squit','2018-06-16 11:12','2018-06-18 14:08',1),
(100,2394,558151,'Requested blue kit','2019-06-16 11:12','2019-06-18 14:08',1),
(100,2395,558152,'Requested pony','2019-06-16 11:12','2019-06-18 14:08',1),
(100,2396,558153,'Requested sauron','2019-06-16 11:12','2019-06-18 14:08',1),
(100,2394,558151,'Requested I'm tired','2019-06-16 11:12','2019-06-18 14:08',1);
如果这有点厚颜无耻,我很抱歉,但我不知道从哪里开始。
一切都按预期工作,但如果值为 NULL,函数应返回 0。目前它什么都不返回(请参阅帖子末尾的问题)。
如果没有找到订单,我怎么能返回 0?
“订单”表CREATE TABLE orders (
id INT NOT NULL,
code INT NOT NULL,
service_id INT NOT NULL,
status CHARACTER VARYING(50),
creation TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
status_date TIMESTAMP,
created_user INT
);
记录
INSERT INTO orders
(id, code, service_id, status, creation, status_date, created_user)
VALUES
(100,2394,558151,'Requested','2019-06-16 11:12','2019-06-18 14:08',1),
(100,2394,558151,'Fulfilled','2018-06-16 11:12','2018-06-18 14:08',1),
(100,2394,558151,'Requested','2019-06-16 11:12','2019-06-18 14:08',1),
(100,2395,558152,'Requested','2019-06-16 11:12','2019-06-18 14:08',1),
(100,2396,558153,'Requested','2019-06-16 11:12','2019-06-18 14:08',1),
(100,2394,558151,'Requested','2019-06-16 11:12','2019-06-18 14:08',1);
测试声明
SELECT EXTRACT(YEAR FROM creation) AS year,
orders.code,
COUNT(orders.code)
FROM orders
WHERE status = 'Requested' AND EXTRACT(YEAR FROM creation) = 2019 AND orders.code = 2394
GROUP BY year, orders.code
ORDER BY year ASC
退货
年份 | 代码 | 数数 :--- | ---: | ----: 2019 | 第2394章 3
CREATE OR REPLACE FUNCTION
yearly_orders(inyear numeric DEFAULT 0, incode INT DEFAULT 0)
RETURNS TABLE (retyear numeric, retcode bigint, retcout bigint) AS
$$
DECLARE
retcount int DEFAULT 0;
retcode int DEFAULT 0;
retyear numeric DEFAULT 0;
BEGIN
RETURN QUERY SELECT CAST(EXTRACT(year FROM creation) as numeric),
CAST(orders.code as bigint),
COUNT(orders.code)
FROM orders
WHERE status = 'Requested'
AND EXTRACT(YEAR FROM creation) = inyear
AND orders.code = incode
GROUP BY EXTRACT(year FROM creation), orders.code
ORDER BY retyear ASC;
END;
$$
LANGUAGE plpgsql;
select * from yearly_orders(2019, 1194);
应该返回退休| 重新编码 | 撤退 ------: | ------: | ------: | |
退休| 重新编码 | 撤退 ------: | ------: | ------: 0 | 0 | 0
可以在此处找到尝试此操作的 db<>fiddle 。
代码由用户:15356(这里)