读或不读:嘿,伙计们,我找了一个更好的解决方案来解决这个问题已经有2天了。但我每次都失败了。
问题:
我遇到了SQL的问题,实际上我想要做的是从表中选择列而不获取double值,或者我应该说我想使用SELECT DISTINCT
选择列。但与此同时,我也希望使用ORDER BY Time DESC
订购它们。当我使用GROUP BY
时,我会收到错误,因为当所有其他列都在COUNT(column_name) AS Column_Name
之类的函数中时,使用GROUP BY可以工作,但我不想对列进行求和或计数。我想得到他们的价值观。
这是我的数据库列的图像。这只是他们的开始。它们是什么?它们是消息表。将存储和查询用户的消息。
我想要的是什么:
应该是这样的:
每封邮件应为GROUP BY
或仅选择为DISTINCT
但我收到一些错误。我告诉过上面的那些错误。但是,如果我只使用它,我可以选择列。
"SELECT DISTINCT Sender, Recipient FROM Messages WHERE Sender =2 OR Recipient =2";
使用这个可以让我得到一些结果,但我无法订购结果,所以我也需要时间。当我使用DISNTINCT Time
时,我会获得所有4行,因为Time
不相同。
您如何提供帮助:
请向我提供上述数据库表的示例代码,或者告诉我如何从此表访问数据的一个很好的建议:
剩下的我将通过块内的重新查询。
谢谢你的时间。干杯!
答案 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