有没有办法检查 sql 中的特定一致性?
Is there a way to check a specific consistency in sql?
我的数据库中有这些 table:
- 公司(符号,行业,成立,地点)
- 股票(tDate,代码,价格)
粗体列是每个 table 的主键。
我需要在不使用函数的情况下找到数据库中每个日期(tDate
中)股价上涨的公司。
有没有办法做到这一点?
如果他们只有价格上涨,那么对于相同的代码,没有价格较低的新股票。
create table Company (
Symbol varchar(30) primary key,
Name varchar(30),
Sector int default 0,
Founded date,
Location varchar(30)
);
create table Stock (
tDate date,
Symbol varchar(30),
Price decimal(10,2),
foreign key (Symbol) references Company(Symbol)
);
insert into Company (Symbol, Name) values
('rise', 'Rising Star Inc.')
, ('updo', 'Ups & Downs')
insert into Stock (tDate, Symbol, Price) values
('2021-12-01', 'rise', 101.00)
, ('2021-12-02', 'rise', 102.00)
, ('2021-12-03', 'rise', 103.00)
, ('2021-12-04', 'rise', 104.00)
, ('2021-12-01', 'updo', 202.00)
, ('2021-12-02', 'updo', 201.00)
, ('2021-12-03', 'updo', 204.00)
, ('2021-12-04', 'updo', 203.00)
SELECT Symbol
FROM Company
WHERE Symbol IN (
SELECT Symbol
FROM Stock
GROUP BY Symbol
HAVING COUNT(*) > 1
EXCEPT
SELECT DISTINCT Symbol
FROM Stock s1
WHERE EXISTS (
SELECT 1
FROM Stock s2
WHERE s2.Symbol = s1.Symbol
AND s2.tDate > s1.tDate
AND s2.Price < s1.Price
)
);
Symbol
rise
演示 db<>fiddle here
我的数据库中有这些 table:
- 公司(符号,行业,成立,地点)
- 股票(tDate,代码,价格)
粗体列是每个 table 的主键。
我需要在不使用函数的情况下找到数据库中每个日期(tDate
中)股价上涨的公司。
有没有办法做到这一点?
如果他们只有价格上涨,那么对于相同的代码,没有价格较低的新股票。
create table Company ( Symbol varchar(30) primary key, Name varchar(30), Sector int default 0, Founded date, Location varchar(30) ); create table Stock ( tDate date, Symbol varchar(30), Price decimal(10,2), foreign key (Symbol) references Company(Symbol) ); insert into Company (Symbol, Name) values ('rise', 'Rising Star Inc.') , ('updo', 'Ups & Downs') insert into Stock (tDate, Symbol, Price) values ('2021-12-01', 'rise', 101.00) , ('2021-12-02', 'rise', 102.00) , ('2021-12-03', 'rise', 103.00) , ('2021-12-04', 'rise', 104.00) , ('2021-12-01', 'updo', 202.00) , ('2021-12-02', 'updo', 201.00) , ('2021-12-03', 'updo', 204.00) , ('2021-12-04', 'updo', 203.00)
SELECT Symbol FROM Company WHERE Symbol IN ( SELECT Symbol FROM Stock GROUP BY Symbol HAVING COUNT(*) > 1 EXCEPT SELECT DISTINCT Symbol FROM Stock s1 WHERE EXISTS ( SELECT 1 FROM Stock s2 WHERE s2.Symbol = s1.Symbol AND s2.tDate > s1.tDate AND s2.Price < s1.Price ) );
Symbol |
---|
rise |
演示 db<>fiddle here