SQL查询区分二进制替换为日期列

时间:2016-10-25 15:57:17

标签: mysql distinct

我的数据库中有多餐,里面有文字类型。有时我有退格时间。 E.g

Meal 1
hamburger1

Meal 2
hamburger1
hamburger2
hamburger3
hamburger4

Meal 3
Pizza1
Pizza2

Meal 4
hamburger1
hamburger2
hamburger3
hamburger4  <- with whitespace

我需要区分这个列(命名描述),包括空格。你可以看到Meal2和4是相同的,所以我必须区分它们。然后我做了这个mysql查询:

SELECT DISTINCT(BINARY replace(description,' ','')), description FROM meals

有效。但是,当我添加日期列时,不同的功能不再起作用。也许date是一个mysql关键字,这打破了我的疑问?

SELECT DISTINCT(BINARY replace(description,' ','')), description, date, type FROM meals

如何使其适用于名为date的

1 个答案:

答案 0 :(得分:2)

DISTINCT不是一个函数,即使你使用括号使它看起来像是一个函数。

DISTINCT查询修饰符。它始终适用于所有选择列表中的列。如果任何列不同,则整行计为不同。你使用的括号实际上没有意义。

示例:以下行彼此不同,因为日期与其他行的日期不同,即使前两列是相同的。

a  1  2016-10-20
a  1  2016-10-21
a  1  2016-10-22

如果要将查询结果缩减为某个特定列中具有不同值的行,请使用GROUP BY

SELECT TRIM(description) AS description, MAX(date), MAX(type) 
FROM meals
GROUP BY description

(提示:TRIM()函数是使用REPLACE()执行操作的更方便的方法。

其他列,日期和类型,应保留在组聚合函数中。我在这个例子中使用了MAX()。如果您不这样做,并且该组具有多个具有不同日期和类型值的行,则它将选择其中一行任意排序。默认情况下,这种模糊的查询会在MySQL 5.7及更高版本中引发错误。