C# 3列之间的SQL比较
我的数据库中有3列。(1) 买卖(2)ID(3)日期和时间。例如:C# 3列之间的SQL比较,c#,sql,sql-server,C#,Sql,Sql Server,我的数据库中有3列。(1) 买卖(2)ID(3)日期和时间。例如: buySel ID Date 1 234 12/12/2014 1 234 12/12/2014 2 234 12/12/2014 在buySell中,数字(1)表示为buy,数字(2)表示为sell。如果在同一天内购买和出售了ID,例如“234”,则应返回错误消息 这就是我在C#所做的 我设法将其与今天的日期进行了比较,但是如何将
buySel ID Date
1 234 12/12/2014
1 234 12/12/2014
2 234 12/12/2014
在buySell中,数字(1)表示为buy,数字(2)表示为sell。如果在同一天内购买和出售了ID,例如“234”,则应返回错误消息
这就是我在C#所做的
我设法将其与今天的日期进行了比较,但是如何将其与buySell列和ID列进行比较 我不确定你到底想要什么。根据当天的买卖记录,以下内容将识别数据中的所有错误:
select id, date
from databaseTable t
group by id, date
having sum(case when buysel = 1 then 1 else 0 end) > 0 and
sum(case when buysel = 2 then 1 else 0 end) > 0;
我喜欢@GordonLinoff的答案,但还没有将其性能与使用EXISTS和相关子查询进行比较
create table databaseTable (buySel TINYINT, ID INT, [Date] DATE)
insert into databaseTable values
(1,234,'12/12/2014'),
(1,234,'12/12/2014'),
(2,234,'12/12/2014')
select id
,[Date]
from databaseTable a
where exists(select 1 from databaseTable b where b.id=a.id
and b.[Date] = a.[Date]
and buysel = 1)
and exists(select 1 from databaseTable b where b.id=a.id
and b.[Date] = a.[Date]
and buysel = 2)
group by id
,[Date]
在该查询中,GROUPBY仅用作更有效的DISTINCT
编辑:
由于上述说法受到质疑,我想我应该更仔细地研究一下。这里和网上都有很多讨论。我认为这些指导的总和是,groupby通常比DISTINCT更有效,但并非总是如此,DISTINCT是一种更直观的语法
您使用的日期是否与今天的日期相比较?您从数据库表t中得到了
,
“t”代表什么?因为当我执行这个查询时,我没有收到任何记录……这不是与特定日期进行比较。它按日期分组,以查找任何日期的错误情况。”t'是一个表别名,在这个查询中是不需要的,但在我的回答中,它在查询中非常常见和有用。但是,当我将它放在SQL server中时,仍然没有得到任何结果2012@user3517479 . . . 我注意到您的问题使用了一个名为date
的列,但您的代码使用了一个名为created\u time
的列。如果所谓的date
字段包含时间成分,则不太可能获得重复项。您需要从中提取日期,通常使用cast(dateas-date)
@GordonLinoff,我也捕捉到了。看看SQL示例:DATEADD(hour,9,CONVERT(DATETIME,CONVERT(DATE,GETDATE()))
,它甚至尝试将DATE
更改为DATETIME
,这样就可以添加9个小时,然后将其与DATE
值进行比较。了解此表中存储的日期值及其测试数据的精度会有所帮助。@GordonLinoff查询没有返回任何内容。当我对示例数据运行它们时,这两个值返回的内容相同。熟悉sqlfiddle.com吗?我不知道那是什么意思。但显示了针对示例数据的两个查询。@Karlkienger<代码>分组依据和不同
通常具有相同的性能配置文件。对于distinct
的索引使用,一些愚蠢的数据库可能更聪明,但SQL Server相当聪明,因此我怀疑group by
和select distinct
都会生成相同的执行计划。@GordonLinoff我有很好的权威认为group by执行distinct,因此,在返回1列或少数列时,最好使用so。我会看看我是否能找到参考,因为在这种情况下,它将是微不足道的。
create table databaseTable (buySel TINYINT, ID INT, [Date] DATE)
insert into databaseTable values
(1,234,'12/12/2014'),
(1,234,'12/12/2014'),
(2,234,'12/12/2014')
select id
,[Date]
from databaseTable a
where exists(select 1 from databaseTable b where b.id=a.id
and b.[Date] = a.[Date]
and buysel = 1)
and exists(select 1 from databaseTable b where b.id=a.id
and b.[Date] = a.[Date]
and buysel = 2)
group by id
,[Date]