2011-11-12 45 views
1

我在值列表中输出。基于日期和限制标识值

Name Date of Entry 
C1 - 1/1/2011 
C3 - 3/3/2011 
C2 - 2/2/2011  
C4 - 4/4/2011 
C5 - 5/5/2011 

对于说上面的列表数为5,我有帽数为2,所以任何“C的大于2应该被禁用,并且打算将根据入境之日起被禁止的铯。

即。根据日期取出较旧的Cs(首次进入系统),在这种情况下应启用C1和C2,并禁用C3,C4 & C5。

select * from table order by date; =>这给了我C1,C2,C3,C4,C5。

select * from table order by date limit 2; =>这给了我很好的C1和C2,但是我怎么知道C3,C4,C5需要被禁用。

我确实想识别C3,C4和C5需要禁用。

是否可以在单个查询中执行?任何MySQL开发人员都有帮助?

谢谢。

+0

你只是想选择需要被禁用,还是要执行表上的更新行的名字吗? –

+0

没有更新,只需要知道那些被禁用的。 – Sharpeye500

+0

日期保证是唯一的吗?如果有三个日期“2011/1/1”,会发生什么?随机删除其中的两个? –

回答

2

假设日期是唯一的,试试这个:

SELECT 
    name, 
    date, 
    date > 
    (
     SELECT MIN(date) 
     FROM your_table 
     WHERE date > (SELECT MIN(date) FROM your_table) 
    ) AS disabled 
FROM your_table 
ORDER BY date 
+0

错误代码:1235 此版本的mysql尚不支持'LIMIT&IN/ALL/ANY/SOME子查询'我正在使用5.2,我不认为这与版本#有关,可能与查询有关句法。 – Sharpeye500

+0

@ Sharpeye500:对不起,我以前没有测试过。试试我更新的答案。我测试了它,它似乎工作。 –

+0

这非常接近,但它没有给我正确的答案。 1/1/2011 2011年2月2日2011/3/3 2011年4月4日2011/5/5 如果分钟日期是1/1/2011,我需要取顶部2即。 2011年1月1日和2011年2月2日已启用并需要取消 2011年3月3日4/4/2011,5/5/2011为禁用。即。通过选择if(当前行的日期>分钟(日期),1,0)从表中标记1和0的那些条目;即。结合min(日期)和比较日期值,我想我得到的逻辑,不知道的语法。 – Sharpeye500