如何选择某些列不应重复的列

时间:2013-09-18 07:54:21

标签: asp.net sql sql-server-ce

读或不读:嘿,伙计们,我找了一个更好的解决方案来解决这个问题已经有2天了。但我每次都失败了。

问题:

我遇到了SQL的问题,实际上我想要做的是从表中选择列而不获取double值,或者我应该说我想使用SELECT DISTINCT选择列。但与此同时,我也希望使用ORDER BY Time DESC订购它们。当我使用GROUP BY时,我会收到错误,因为当所有其他列都在COUNT(column_name) AS Column_Name之类的函数中时,使用GROUP BY可以工作,但我不想对列进行求和或计数。我想得到他们的价值观。

这是我的数据库列的图像。这只是他们的开始。它们是什么?它们是消息表。将存储和查询用户的消息。

message table..

我想要的是什么:

应该是这样的:

每封邮件应为GROUP BY或仅选择为DISTINCT但我收到一些错误。我告诉过上面的那些错误。但是,如果我只使用它,我可以选择列。

"SELECT DISTINCT Sender, Recipient FROM Messages WHERE Sender =2 OR Recipient =2";

使用这个可以让我得到一些结果,但我无法订购结果,所以我也需要时间。当我使用DISNTINCT Time时,我会获得所有4行,因为Time不相同。

您如何提供帮助:

请向我提供上述数据库表的示例代码,或者告诉我如何从此表访问数据的一个很好的建议:

  1. 按时间排序
  2. 发件人和收件人不要重复。
  3. 剩下的我将通过块内的重新查询。

    谢谢你的时间。干杯!

2 个答案:

答案 0 :(得分:0)

显然,每个重复的Sender, Recipient组合都可以有不同的Time值,从而使ORDER BY无意义。

但是,如果您可以将每个组合的Time值投射到组合的有意义标量中,那么您可以使用DISTINCT代替GROUP BY,而不是ORDER BY,这将允许您SELECT一个不在SELECT [Sender], [Recipient] FROM [Messages] WHERE [Sender] =2 OR [Recipient] =2 GROUP BY [Sender], [Recipient] ORDER BY MIN([Time]); -- Or some other aggregate, e.g. Average etc. 的字段,前提是您也使用了聚合,即

{{1}}

不是我的原创作品:请参阅此处How to select DISTINCT rows without having the ORDER BY field selected

答案 1 :(得分:0)

如果您使用的是SQL Server,可以尝试:

SELECT DISTINCT 
  Sender, 
  Recipient,
  MIN(Time) OVER (PARTITION BY Sender, Recipient) AS MinTime
FROM Messages 
  WHERE Sender =2 OR Recipient =2
ORDER BY MinTime
相关问题