SQL-选择具有给定属性奇数的记录
我只是在温习一些SQL——换句话说,我真的生锈了——现在有点卡住了。这可能是一些琐碎的事情,但我们拭目以待 我想选择所有拥有非整数属性奇数的人(在本例中为TransactionType)。因此,举个例子,看看下面的测试/非真实信息,这些人在哪里买车或购买类似的大宗商品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
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或其他东西,所以你知道先添加了哪个项目吗?你需要像这样的东西来采用我的方法。