Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 3列之间的SQL比较_C#_Sql_Sql Server - Fatal编程技术网

C# 3列之间的SQL比较

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#所做的 我设法将其与今天的日期进行了比较,但是如何将

我的数据库中有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#所做的


我设法将其与今天的日期进行了比较,但是如何将其与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]