2013-11-19 2 views
1

У меня есть таблица вроде этого:MySQL - подтягивание Список Незавершенные на Даты

ID_____PostingDate_____PosterID 
-------------------------------- 
1______05/01/2012______450 
2______06/30/2012______451 
3______02/17/2013______451 
4______12/10/2012______451 
5______06/14/2012______452 
6______06/15/2012______452 
7______05/01/2012______453 
8______06/04/2012______453 
9______04/05/2013______454 
10_____05/05/2013______454 

Я пытаюсь получить список всех PosterIDs, которые размещены в мае или июне 2012 года, и не размещены снова с тех пор.

Желаемая Result из приведенных выше таблиц:

PosterID 
-------- 
450 
452 
453 

Я попытался:

WHERE DATE_FORMAT(PostingDate, '%m-%Y') IN ('05-2012', '06-2012') 

и

SELECT UNIQUE(a.PosterID) 
FROM 
    (SELECT ID, PostingDate, PosterID FROM table WHERE DATE_FORMAT(PostingDate, '%m-%Y') IN ('05-2012', '06-2012') 
    ) a 
WHERE DATEDIFF(PostingDate, NOW()) > 365 

хотя ни один из них приближается

ответ

1

Попробуйте это:

SELECT DISTINCT PosterID 
FROM table1 
WHERE PostingDate BETWEEN '2012-05-01' AND '2012-06-30' 
AND posterID NOT IN (SELECT PosterID 
    FROM table1 
    WHERE PostingDate > '2012-07-01'); 

sqlfiddle demo

+0

@Ken. Это неверно. Первый запрос сообщает вам, что такое записи, которые произошли за этот 2-месячный период. не в будут удалять из результатов те, которые были отправлены после '2012-07-01'. Вы можете проверить sqlfiddle. если вы удалите часть AND posterid NOT IN .., она также вернет 451. –

+0

Ah - Вы правы ... Я неосознанно манипулировал вашей опубликованной формулой. После того, что вы поработали! +1 скоро я поеду еще немного. Спасибо за ваш пост и последующий отчет – Ken

+0

Еще раз спасибо. Я опубликовал «вторую половину» по этому вопросу/более подробную часть этой формулы, если вы можете здесь помочь: http://stackoverflow.com/questions/20077332/mysql-pulling-list-depending-on-date и-категории – Ken

0

попробовать что-то вроде этого:

where PostingDate < '2012-7-1' and PostingDate >= '2012-5-1' 
1
SELECT PosterID 
    FROM ( SELECT PosterID, MAX(PostingDate) AS latest_post 
       FROM tbl 
      GROUP BY 1) latest_posts 
    WHERE latest_post BETWEEN '2012-05-01' AND '2012-06-30' 
ORDER BY PosterID; 
Смежные вопросы