这是我的SQL查询:结合SELECT DISTINCT和ORDER BY
SELECT DISTINCT dest
FROM messages
WHERE exp = ?
UNION
SELECT DISTINCT exp
FROM messages
WHERE dest = ?
与此查询,我得到的所有我发送或接收的消息。但在我的表messages
,我有一个字段timestamp
,我需要,与此查询,按时间戳添加订单...但如何?
这是我的SQL查询:结合SELECT DISTINCT和ORDER BY
SELECT DISTINCT dest
FROM messages
WHERE exp = ?
UNION
SELECT DISTINCT exp
FROM messages
WHERE dest = ?
与此查询,我得到的所有我发送或接收的消息。但在我的表messages
,我有一个字段timestamp
,我需要,与此查询,按时间戳添加订单...但如何?
SELECT *
FROM
( SELECT
col1 = dest,
col2 = MAX(timestampCol)
FROM
messages
WHERE
exp = ?
GROUP BY
dest
UNION
SELECT
col1 = exp,
col2 = MAX(timestampCol)
FROM
messages
WHERE
dest= ?
GROUP BY
exp
) tbl
ORDER BY col2
这应该每distinct
只返回一行exp
/dest
虽然我相信这可能可以做到没有工会; GROUP BY
只会得到最近的一个。
更新SQL:鉴于有可能在一个记录exp
等于在相同或另一个记录一个dest
。
SELECT
CASE WHEN exp = ? THEN dest ELSE exp END AS col1
,MAX(timestampCol) AS col2
FROM
messages
WHERE
exp = ?
OR dest = ?
GROUP BY
(CASE WHEN exp = ? THEN dest ELSE exp END)
ORDER BY
MAX(timestampCol) DESC;
你可能需要考虑增加一些虚拟数据的SQL Fiddle,让用户更好地帮助你。
不知道我需要做什么[col1]和[col2]。 –
'[col1]'和'[col2]'就是我给列给出的名字,因为使用'UNION'它明确了哪些列将被返回。 '[col1]'是你在查询中返回的不同条目,'[col2]'是时间戳列。如果你不想返回时间戳列,你可以'SELECT DISTINCT [col1]'而不是'SELECT *' – talegna
好吧,你的SQL语法有错误^^ Phpmyadmin不喜欢你的[col1 ] –
SELECT *
FROM
(
SELECT DISTINCT dest AS Column1, timestamp AS Column2
FROM messages
WHERE exp = ?
UNION
SELECT DISTINCT exp AS Column1, timestamp AS Column2
FROM messages
WHERE dest = ?
) tbl
ORDER BY Column2
不,使用此查询,我可以获得时间戳的所有可能组合... –
你可以做到这一点没有一个union
:
SELECT (case when exp = ? then dest else exp end), timestamp
FROM messages
WHERE exp = ? or dest = ?;
然后得到最新消息,为每个参与者,使用group by
不distinct
:
SELECT (case when exp = ? then dest else exp end) as other, max(timestamp)
FROM messages
WHERE exp = ? or dest = ?
group by (case when exp = ? then dest else exp end)
order by max(timestamp) desc;
对于 –
@ClémentAndraud,您的SQL语法错误。 。 。这是一个简单的SQL小提琴,它显示了两者在语法上都是正确的SQL(http://www.sqlfiddle.com/#!2/c72625/2)。这是一个简化的表结构,'0'代替'?'。 –
这个查询将帮助您通过时间戳
SELECT tbl.mailId, Max(timestampColumn) MostRecentDate
FROM
(
SELECT exp AS mailId, Max(timestampCol) AS timestampColumn
FROM Employeeatd
WHERE dest = ?
GROUP BY exp
UNION
SELECT Dept AS abc, Max(timestampCol) AS timestampColumn
FROM Employeeatd
WHERE exp = ?
GROUP BY Dept
) tbl
GROUP BY mailId
ORDER BY Max(timestampColumn) desc
如果有多个项目获得的记录顺序,你需要哪些时间戳? – talegna
我只需要用最新的优先订购我的消息 –
您的查询不会返回您发送或接收的所有消息。它会返回所有与之通信的人员,而不会有重复。 –