我有一张这样的桌子:
Date.prototype.timezoneOffset = new Date().getTimezoneOffset()
Date.setTimezoneOffset = (timezoneOffset)->
return @prototype.timezoneOffset = timezoneOffset
Date.getTimezoneOffset = ->
return @prototype.timezoneOffset
Date.prototype.setTimezoneOffset = (timezoneOffset)->
return @timezoneOffset = timezoneOffset
Date.prototype.getTimezoneOffset = ->
return @timezoneOffset
Date.prototype.toString = ->
offsetTime = @timezoneOffset * 60 * 1000
offsetDate = new Date(@getTime() - offsetTime)
return offsetDate.toUTCString()
[
'Milliseconds', 'Seconds', 'Minutes', 'Hours',
'Date', 'Month', 'FullYear', 'Year', 'Day'
]
.forEach (key)=>
Date.prototype["get#{key}"] = ->
offsetTime = @timezoneOffset * 60 * 1000
offsetDate = new Date(@getTime() - offsetTime)
return offsetDate["getUTC#{key}"]()
Date.prototype["set#{key}"] = (value)->
offsetTime = @timezoneOffset * 60 * 1000
offsetDate = new Date(@getTime() - offsetTime)
offsetDate["setUTC#{key}"](value)
time = offsetDate.getTime() + offsetTime
@setTime(time)
return time
提供者可以在约会时提供住宿或用餐。 有没有办法可以选择只提供餐点或只提供住宿的所有提供者?
所以我期待:
+--------+------+-----+
|Provider|Type |Date |
+--------+------+-----+
|1 |Meal |Date1|
+--------+------+-----+
|1 |ACCOM |Date2|
+--------+------+-----+
|2 |Meal |Date3|
+--------+------+-----+
|2 |Meal |Date4|
+--------+------+-----+
|3 |ACCOM |Date5|
+--------+------+-----+
|3 |ACCOM |Date6|
+--------+------+-----+
由于提供者2仅提供膳食,提供者3仅提供住宿。
最初的问题是:
列出仅提供住宿或膳食的所有提供者(不是 都)。
注意:不要消除结果中的重复项。
所以我认为我应该一步到位而不是再次加入表格。
我提出了以下问题:
+--------+------+-----+
|2 |Meal |Date3|
+--------+------+-----+
|2 |Meal |Date4|
+--------+------+-----+
|3 |ACCOM |Date5|
+--------+------+-----+
|3 |ACCOM |Date6|
+--------+------+-----+
问题是这个查询有重复的代码,唯一的区别是'ACCOM'或'MEAL'所以可以再次改进此查询吗?
答案 0 :(得分:1)
以下是每个提供商只能获得一行的方法:
select provider, min(type)
from t
group by provider
having min(type) = max(type);
如果您确实需要重复项,请使用join
:
select t.*
from t join
(select provider, min(type)
from t
group by provider
having min(type) = max(type)
) tt
on t.provider = p.provider;