2016-10-27 3 views
0

Я пытаюсь посмотреть на текущий вид спорта, в котором пользователь принимает участие в течение последнего месяца (2016-08-01), и подсчитывать число, которое находится в новом спорте от в предыдущем месяце.SQL сравнивает значения двух записей в одной таблице

MONTH  | ID | SPORT 
_________________________________________ 
2016-07-01 | 12 | Football 
2016-08-01 | 12 | Tennis 

2016-07-01 | 28 | Rugby 
2016-08-01 | 28 | Tennis 

2016-07-01 | 31 | Football 
2016-08-01 | 31 | Football 

Так в приведенном выше примере будет возвращать счетчик 2.

Код ниже неправильно, но я понятия не имею, как подойти к этому

SELECT * FROM SPORTS WHERE currentmonth='2016-08-01' AND ID, SPORT NOT IN 
(SELECT * FROM SPORTS WHERE currentmonth='2016-07-01') 
+1

Что у вас есть? – Xatenev

+0

@ Xatenev добавлен. –

ответ

1

Если каждый пользователь принимает участие только в один вид спорта в месяц вы могли бы использовать этот подход:

SELECT count(*) FROM(
    SELECT DISTINCT id, count(id) idno 
    FROM `mytbl` 
    WHERE `month` BETWEEN '2016-07-01' AND '2016-08-01' 
    GROUP BY id, sport) as subq 
WHERE subq.idno=1 

Here is a fiddle.

У меня жесткий код в месяц, но вы должны заменить их на переменные.

+0

Работала так, как будто мне это нужно. благодаря –