Mysql 将两列作为一个不同的列或分组依据进行检索
Mysql Retrieving Two Columns As One Distinct or Group By
我被一个 mysql 查询难住了。我试图从按日期排序的两列中取回所有唯一值。这是我的 table:
from to body created_on
+55555555555 +22222222222 hello 2015-03-20 01:00:00
+11111111111 +33333333333 hello 2015-03-21 01:00:00
+33333333333 +44444444444 hello 2015-03-18 01:00:00
+66666666666 +11111111111 hello 2015-03-12 01:00:00
+11111111111 +77777777777 hello 2015-03-05 01:00:00
基本上它是一个存储短信的 table,我想拉回最近的 100 个 phone 号码,这些号码已进入短信 table。所以像这样:
number
+11111111111
+77777777777
+66666666666
+22222222222
+33333333333
另一个要求是我不会拉回 phone 号码 +4444444444 和 +555555555555,因为它们是管理员号码。这些数字也应该按日期排序。
这是我目前的情况:
SELECT `from` as num, created_at FROM sms WHERE `from` NOT IN (+4444444444, +5555555555)
GROUP BY num
UNION
SELECT `to` as num, created_at FROM sms WHERE `to` NOT IN (+4444444444, +5555555555)
GROUP BY num
ORDER BY created_at
我知道我已经接近了,但它带回了我不想要的重复项。
您可以在 UNION
操作的两个查询中初始应用 MAX
以获得每个数字的最新日期。在整个集合上再次应用它并使用 LIMIT
子句按日期降序排列以获得 100 个最近的数字:
SELECT num, MAX(created_at) AS created_at
FROM (
SELECT `from` as num, MAX(created_at) AS created_at
FROM sms
WHERE `from` NOT IN (+4444444444, +5555555555)
GROUP BY num
UNION
SELECT `to` as num, MAX(created_at) AS created_at
FROM sms
WHERE `to` NOT IN (+4444444444, +5555555555)
GROUP BY num) AS t
GROUP BY number
ORDER BY created_at DESC LIMIT 100
我被一个 mysql 查询难住了。我试图从按日期排序的两列中取回所有唯一值。这是我的 table:
from to body created_on
+55555555555 +22222222222 hello 2015-03-20 01:00:00
+11111111111 +33333333333 hello 2015-03-21 01:00:00
+33333333333 +44444444444 hello 2015-03-18 01:00:00
+66666666666 +11111111111 hello 2015-03-12 01:00:00
+11111111111 +77777777777 hello 2015-03-05 01:00:00
基本上它是一个存储短信的 table,我想拉回最近的 100 个 phone 号码,这些号码已进入短信 table。所以像这样:
number
+11111111111
+77777777777
+66666666666
+22222222222
+33333333333
另一个要求是我不会拉回 phone 号码 +4444444444 和 +555555555555,因为它们是管理员号码。这些数字也应该按日期排序。
这是我目前的情况:
SELECT `from` as num, created_at FROM sms WHERE `from` NOT IN (+4444444444, +5555555555)
GROUP BY num
UNION
SELECT `to` as num, created_at FROM sms WHERE `to` NOT IN (+4444444444, +5555555555)
GROUP BY num
ORDER BY created_at
我知道我已经接近了,但它带回了我不想要的重复项。
您可以在 UNION
操作的两个查询中初始应用 MAX
以获得每个数字的最新日期。在整个集合上再次应用它并使用 LIMIT
子句按日期降序排列以获得 100 个最近的数字:
SELECT num, MAX(created_at) AS created_at
FROM (
SELECT `from` as num, MAX(created_at) AS created_at
FROM sms
WHERE `from` NOT IN (+4444444444, +5555555555)
GROUP BY num
UNION
SELECT `to` as num, MAX(created_at) AS created_at
FROM sms
WHERE `to` NOT IN (+4444444444, +5555555555)
GROUP BY num) AS t
GROUP BY number
ORDER BY created_at DESC LIMIT 100