2015-02-02 2 views
0
sharedid property shareduser shareddatetime 
111  32  129   2015-02-02 13:30:44 
117  33  129   2015-02-02 13:41:21 
119  33  129   2015-02-02 13:40:44 

В приведенной выше таблице я показываю результат, который у меня есть. Теперь я хочу получить свой результат, например, если shareduser должен быть 129, а shareddatetime - минимальным с группой по столбцу свойств. Я побежал по указанному ниже запрос,GROUP BY с условием предложения и min в sql

SELECT * FROM sharing WHERE `shareduser` = 129 GROUP BY property HAVING min(shareddatetime) 

результат:

sharedid property shareduser shareddatetime 
111  32  129   2015-02-02 13:30:44 
117  33  129   2015-02-02 13:41:21 

Но ожидаемый результат не приходит с мин(). Я хочу привести как

sharedid property shareduser shareddatetime 
111  32  129   2015-02-02 13:30:44 
119  33  129   2015-02-02 13:40:44 
+0

'MIN' не делает то, вы думаете, что он делает это, он просто выбирает самое низкое значение для столбца в сгруппированных данных - и в этом случае вы, фактически не выбирая его; вам понадобится 'SELECT MIN (shareddatetime), совместное использование. *' или аналогичное. 'HAVING MIN (shareddatetime)' в основном утверждает, что должно существовать 'MIN (shareddatetime)' ... что, конечно же, есть. – CD001

ответ

0

SELECT * FROM sharing WHERE shareduser = 129 ORDER BY shareddatatime asc Это должно сделать это

и для группы на самом деле я забыл, что вы можете использовать:

ORDER BY property asc, shareddatatime asc

+0

asc = самый низкий desc = высший –

+0

Спасибо вам, что он работает –

+0

@JaydeepVaghasiya отметьте его как ответ, пожалуйста. –

1

Ваш имеющий пункт неверен, проверка стандартный синтаксис SQL для этого. Вы можете использовать подзапрос для получения свойства с минимальным значением.

SELECT * FROM sharing WHERE `shareduser` = 129 
    and `shareddatetime` = (select min(`shareddatetime`) 
    from sharing s2 
    where s2.`shareduser` = sharing.`shareduser` 
    and s2.`property` = sharing.`property`) 

http://www.sqlfiddle.com/#!2/22ee4a/3 (Использование Kalid схемы)

1

Вы можете использовать самостоятельно присоединиться, чтобы получить желаемые результаты

select s.* 
from sharing s 
join(select `property`, `shareduser`,min(shareddatetime) shareddatetime 
    from sharing 
    where `shareduser` = 129 
    group by `property`, `shareduser` 
) s1 
using(`property`, `shareduser`,shareddatetime) 

DEMO

1
SELECT s1.* FROM sharing s1 inner join 
(select min(shareddatetime) minshareddatetime FROM sharing group by property) tmp 
on s1.shareddatetime = tmp.minshareddatetime 
where s1.shareduser = 129;