Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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
SQL-选择具有给定属性奇数的记录_Sql_Sql Server_Modulus - Fatal编程技术网

SQL-选择具有给定属性奇数的记录

SQL-选择具有给定属性奇数的记录,sql,sql-server,modulus,Sql,Sql Server,Modulus,我只是在温习一些SQL——换句话说,我真的生锈了——现在有点卡住了。这可能是一些琐碎的事情,但我们拭目以待 我想选择所有拥有非整数属性奇数的人(在本例中为TransactionType)。因此,举个例子,看看下面的测试/非真实信息,这些人在哪里买车或购买类似的大宗商品 Name TransactionType Date John Buy 5/1 John Cancel 5/1 John Buy 5/2 Joseph Buy

我只是在温习一些SQL——换句话说,我真的生锈了——现在有点卡住了。这可能是一些琐碎的事情,但我们拭目以待

我想选择所有拥有非整数属性奇数的人(在本例中为TransactionType)。因此,举个例子,看看下面的测试/非真实信息,这些人在哪里买车或购买类似的大宗商品

Name TransactionType Date

John   Buy           5/1
John   Cancel        5/1
John   Buy           5/2
Joseph Buy           5/25
Joseph Cancel        5/25
Tanya  Buy           5/28
我希望它能返回交易次数为奇数的人;换句话说,他们最终购买了该商品。所以,在这种情况下,约翰和坦尼亚会被选中,而约瑟夫不会

我知道我可以在这里使用模操作数,但我有点不知道如何正确使用它。 我想用

count(TransactionType) % 2 != 0

在where子句中,但这显然是不允许的。任何指向正确方向的指针都会非常有用。如果不清楚,请告诉我,谢谢

你很接近。你需要一个having子句而不是where子句

select Name
from table
group by Name
having count(TransactionType) % 2 != 0

你很接近。你需要一个having子句而不是where子句

select Name
from table
group by Name
having count(TransactionType) % 2 != 0

您是否最好在交易日期前获得最新状态,并使用该状态,而不是依靠计数
TransactionType
来确定最新状态:

大概是这样的:

SELECT b.Name, b.TransactionType, b.[Date]
FROM (
   SELECT Name, MAX(t1.[DATE]) latestDate
   FROM [Transactions] t1
   GROUP BY t1.Name
   ) a
INNER JOIN [Transactions] b ON b.Name = a.Name AND a.latestDate = b.[Date]
WHERE b.TransactionType = 'Buy'
假设您的日期是包含时间的有效日期,这应该有效


如果只存储日期部分,则在同一日期购买和取消的人的最大日期相同,因此,它将返回更多数据和一些不正确的记录。

您是否最好在交易日期前获取最新状态并使用它,而不是依靠计数
交易类型来确定最新状态:

大概是这样的:

SELECT b.Name, b.TransactionType, b.[Date]
FROM (
   SELECT Name, MAX(t1.[DATE]) latestDate
   FROM [Transactions] t1
   GROUP BY t1.Name
   ) a
INNER JOIN [Transactions] b ON b.Name = a.Name AND a.latestDate = b.[Date]
WHERE b.TransactionType = 'Buy'
假设您的日期是包含时间的有效日期,这应该有效


如果只存储日期部分,则在同一日期购买和取消的用户的最大日期将相同,因此它将返回更多数据和一些不正确的记录。

感谢您的帮助。我知道我遗漏了一些比较明显的东西:)谢谢你的帮助。我知道我遗漏了一些比较明显的东西:)这就是你所有的专栏吗?你的日期栏有时间吗?没有,这不是我的实际数据。但是,准确地说,我有一个销售日期-出于某种原因存储为varchar-它包括时间吗?不,不包括-它看起来像:例如,5月12日14日。它是否有一个递增的id或其他东西,所以你知道先添加了哪个项目吗?你需要这样的东西才能采用我的方法。你所有的专栏都是这样吗?你的日期栏有时间吗?没有,这不是我的实际数据。但是,准确地说,我有一个销售日期-出于某种原因存储为varchar-它包括时间吗?不,不包括-它看起来像:例如,5月12日14日。它是否有一个递增的id或其他东西,所以你知道先添加了哪个项目吗?你需要像这样的东西来采用我的方法。