2017-05-22 47 views
1

我有一个包含以下记录Mysql的获得没有处理前一个月的所有记录在当月

slno | FirstName | LastName | Attended | Month | Year | 
-----|-----------|----------|----------|--------|------| 
1 | John  | Smith | 0  | 04 | 2017 | 
2 | Jack  | Paul | 1  | 04 | 2017 | 
3 | Jerry | Tom | 1  | 04 | 2017 | 
4 | Beth  | Home | 0  | 04 | 2017 | 
5 | Julia | John | 1  | 04 | 2017 | 
6 | Cris  | joy  | 0  | 05 | 2017 | 
7 | Meiy  | Rony | 1  | 05 | 2017 | 
8 | Ronald | Jony | 1  | 05 | 2017 | 
9 | Quest | Pio  | 0  | 05 | 2017 | 
10 | Mary  | June | 1  | 05 | 2017 | 
11 | Joy  | Meth | 0  | 03 | 2017 | 
12 | Ruby  | Rony | 1  | 03 | 2017 | 
13 | Royal | Jony | 1  | 03 | 2017 | 
14 | Tweet | Pio  | 0  | 03 | 2017 | 
15 | Min  | June | 1  | 03 | 2017 | 

我想说明根据年份和月份的数据表。 例如:04 2017应该只显示4月份的月份数据和3月份出席的= 0。但是当我搜索2017年5月时,它应该显示5月份的月份数据,其中包括以前的月份数据,即出席= 0 [3月和4月]。

我有以下语句:

select FirstName,LastName,Attended from UserTable 
where Attended in (0,1) 
and (Attended not in (1) or (Month='04' and Year='2017')); 

我会得到我想要的记录。但是如果我搜索Month = '03'Year ='2017',则它会显示从五月和四月开始的所有Attended = 0。

if Month='05' year='2017' -- current month 

    6 | Cris  | joy  | 0  | 05 | 2017 | 
    7 | Meiy  | Rony | 1  | 05 | 2017 | 
    8 | Ronald | Jony | 1  | 05 | 2017 | 
    9 | Quest | Pio  | 0  | 05 | 2017 | 
    10 | Mary  | June | 1  | 05 | 2017 | 
    1 | John  | Smith | 0  | 04 | 2017 | 
    4 | Beth  | Home | 0  | 04 | 2017 | 
    11 | Joy  | Meth | 0  | 03 | 2017 | 
    14 | Tweet | Pio  | 0  | 03 | 2017 | 

如果一个月= '04' 年= '2017年'

1 | John  | Smith | 0  | 04 | 2017 | 
2 | Jack  | Paul | 1  | 04 | 2017 | 
3 | Jerry | Tom | 1  | 04 | 2017 | 
4 | Beth  | Home | 0  | 04 | 2017 | 
5 | Julia | John | 1  | 04 | 2017 | 
11 | Joy  | Meth | 0  | 03 | 2017 | 
14 | Tweet | Pio  | 0  | 03 | 2017 | 

如果一个月= '03' 年= '2017年'

11 | Joy  | Meth | 0  | 03 | 2017 | 
12 | Ruby  | Rony | 1  | 03 | 2017 | 
13 | Royal | Jony | 1  | 03 | 2017 | 
14 | Tweet | Pio  | 0  | 03 | 2017 | 
15 | Min  | June | 1  | 03 | 2017 | 

我怎样才能做到这一点?

+1

难道您发布表架构,什么是参加了,一个月的类型和年专栏? – lloiacono

+0

varchar是。像这样的存储过程调用:call getUserDetails('04','2017'); – RUPA

+1

使用其他信息而不是评论来编辑您的问题。你期望什么输出,特别是对于上个月的信息。 –

回答

1
SELECT * FROM your_table 
WHERE 
('05' = `Month` AND '2017' = `Year`) 
OR 
(
    '05-2017' >= DATE_FORMAT(STR_TO_DATE(CONCAT(`Mont`, '-', `Year`), '%m-%Y'), '%m-%Y') 
    AND 
    Attended = 0 
); 
2

你可以通过你的月份和年份解析为日期做到这一点,然后查询这个是这样的:

SELECT * FROM your_table 
WHERE 
('05' = `Month` AND '2017' = `Year`) 
OR 
(
    '05-2017' >= DATE_FORMAT(STR_TO_DATE(CONCAT(`Mont`, '-', `Year`), '%m-%Y'), '%m-%Y') 
    AND 
    Attended = 0 
); 
+0

这将无法获得当前月份的信息,其中Attended = 1或0 –

+0

@SloanThrasher更新了答案,解释了该问题 – lloiacono

+1

Close, '''和'2017'=年''' –

相关问题