0

阅读与否:嘿,伙计们,我已经花了 2 天时间寻找更好的解决方案来解决这个问题。但我每次都失败。

问题:

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

这是我的数据库列的图像。这对他们来说只是一个开始。它们是什么?它们是消息表。存储和查询用户消息的位置。

留言表..

我想得到什么:

它应该是这样的:

每条消息都应该GROUP BY或简单地选择为,DISTINCT但我得到了一些错误。我已经讲述了上面的那些错误。但是,如果我只使用它,我可以选择列。

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

使用它确实可以让我得到一些结果,但我无法订购结果,所以我也需要时间。当我使用时,DISNTINCT Time我得到了所有 4 行,因为Time不一样。

您如何提供帮助:

要么向我提供上述数据库表的示例代码,要么告诉我如何访问该表中的数据的好建议,以便它:

  1. 按时间排序
  2. 发件人和收件人不要重复。

剩下的我将通过块内的重新查询。

无论如何,感谢您的时间。干杯!

4

2 回答 2

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
于 2013-09-18T08:27:53.240 回答
0

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

但是,如果您有办法将每个组合的值投影到组合的有意义的标量中,那么您可以使用Time代替,这将允许您访问不在 中的字段,前提是您也使用聚合,即DISTINCTGROUP BYORDER BYSELECT

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.

不是我的原创作品:请参阅此处如何选择 DISTINCT 行而不选择 ORDER BY 字段

于 2013-09-18T08:06:30.357 回答