2015-08-27 2 views
5

http://sqlfiddle.com/#!9/ea4d2/1Хочет устранить повторяющиеся записи на основе только значение столбца

Вот SQLfiddle смотреть. storepkid 16 повторяется 2 раза. Но я хочу это только один раз. Я попробовал DISTINCT, но он устранил всю повторяющуюся строку, поэтому в этом случае он не работает. Какие изменения необходимо внести в запрос, чтобы получить правильный результат? Пожалуйста помоги.

ПРИМЕЧАНИЕ: забыли упомянуть в начальном вопросе, что я тоже пробовал GROUP BY, но он дает неверные данные в результате набора записей. Я попытался использовать GROUP BY следующими способами.

http://sqlfiddle.com/#!9/ea4d2/20

http://sqlfiddle.com/#!9/ea4d2/17

Примечание 2: @Gabriel Вальдес Timbol, я хочу привести, как это. Строка с дубликатом storepkid должна быть устранена.

| Storepkid | selldate | 
+---------------+-----------------------+ 
|  19 | August, 25 2015 10:00:00 | 
|  12 | August, 24 2015 19:00:00 | 
|  16 | August, 24 2015 16:00:00 | 
|  15 | August, 23 2015 13:00:00 | 
|  17 | August, 21 2015 10:00:00 | 
+0

вы пробовали использовать GROUP BY? –

+0

точки пирога для обеспечения скрипки – Drew

+0

Подождите, вы можете дать нам пример того, чего вы хотите достичь? а также образец структуры таблицы? :) Нарисуйте нас здесь –

ответ

2

Вы можно использовать max функция. Используйте приведенные ниже запрос,

SELECT p.storepkid, max(p.selldate) AS recentselldate 
FROM 
(SELECT storepkid, purchasedatetime AS selldate 
     FROM t_product_purchase 
UNION ALL 
SELECT storepkid, starttime AS selldate 
     FROM t_service_purchase 
UNION ALL 
SELECT storepkid, selldatetime AS selldatetime 
     FROM t_coupon_purchase) p 
GROUP BY storepkid 
order by max(p.selldate) 
DESC LIMIT 0,5 

ВЫВОД:

| Storepkid |  selldate   | 
+---------------------------------------+ 
|  19 | August, 25 2015 10:00:00 | 
|  12 | August, 24 2015 19:00:00 | 
|  16 | August, 24 2015 16:00:00 | 
|  15 | August, 23 2015 13:00:00 | 
|  14 | August, 21 2015 13:15:00 | 

Проверить DEMO HERE

+0

Это как волшебство .... большое спасибо за вашу ценную помощь. Он отлично работает, как и должно быть. Это еще что-то, что я все еще пытаюсь понять магию MAX() в запросе ... hahaha –

+0

Ха-ха ... Надеюсь, вы скоро поймете волшебство;) ... Рад, что я помог :) – Crazy2crack

+0

Функция MAX() возвращает наибольшее значение выбранного столбца. [MAX()] (http://www.w3schools.com/sql/sql_func_max.asp) –

1

Здесь правильна код я попробовал его на вашей скрипке Fiddle

Я также столкнулся с подобной проблемой --->Joining Two Tables

SELECT p.storepkid, p.selldate AS recentselldate FROM (SELECT storepkid, purchasedatetime AS selldate FROM t_product_purchase UNION ALL SELECT storepkid, starttime AS selldate FROM t_service_purchase UNION ALL SELECT storepkid, selldatetime AS selldatetime FROM t_coupon_purchase) p GROUP BY p.storepkid ORDER BY recentselldate DESC LIMIT 0,5 
+0

Благодарим вас за ответ. Я выполнил ваш запрос, но storepkid 19 как последнюю продажу 25 августа, и эта запись не отображается в наборе записей. –

+0

ohh да .. ну, я думаю, мы можем это исправить;) запустите несколько минут, чтобы дать вам пересмотренный код –

0

Просто добавьте группу по полю перед заказом например,

SELECT p.storepkid, p.selldate AS recentselldate FROM (SELECT storepkid, purchasedatetime AS selldate FROM t_product_purchase UNION ALL SELECT storepkid, starttime AS selldate FROM t_service_purchase UNION ALL SELECT storepkid, selldatetime AS selldatetime FROM t_coupon_purchase) p GROUP BY storepkid ORDER BY recentselldate DESC LIMIT 0,5 
+0

спасибо за ваш ответ, GROUP BY дает неверные записи в наборе результатов. Пожалуйста, сообщите далее. –

Смежные вопросы