从数据库中选择三个序列

时间:2015-03-24 12:34:46

标签: mysql sql math

我想在我的表格中将ID分组为三组,每天选择一组,并每隔4天重复一次。我不知道我是否正确解释但我会尝试在一个例子上做。我们说我们有ids 1,2,3,4,5,6,7,8,9,10...n 我想在第二天1,4,7,10...n和第三天2,5,8,11...n选择3,6,9,12...n的第一天。当我对奇数和偶数id做几乎相同时,这非常容易。在奇怪的日子里,我选择了奇怪的ids甚至几天甚至是ids。但是现在我需要在3天内完成它。提前谢谢。

3 个答案:

答案 0 :(得分:2)

SELECT * FROM TABLE
WHERE
id%3 = 1 -- for day 1
id%3 = 2 -- for day 2
id%3 = 0 -- for day 3

或者您可以使用:

SELECT * FROM TABLE
WHERE CASE WHEN id % 3 = 0 THEN 3
                   ELSE id % 3
              END = YourDayNumber

样品:

SELECT id,
'Day ' + CAST(CASE WHEN id % 3 = 0 THEN 3
                   ELSE id % 3
              END AS VARCHAR(100)) DayNbr
FROM 
(
SELECT 1 id
UNION
SELECT 2
UNION
SELECT 3
UNION
SELECT 4
UNION
SELECT 5
UNION
SELECT 6
UNION
SELECT 7
UNION
SELECT 8
UNION
SELECT 9
) a

答案 1 :(得分:2)

使用MOD(x,y)函数返回x的余数除以y和函数TO_DAYS(some_date_here),它返回自第0年以来的天数。通过在TO_DAYS中使用函数NOW(),我们得到一个每天都有新号码。也把它放在模数中,这将产生一个每3天生成一个循环,它将选择像

这样的ID

... 1,4,7,10-

第二天

... 2,5,8,11-

第二天

3,6,9,12

第二天又从顶部回来

因此,此查询无需每天修改即可运行:

SELECT * FROM my_table WHERE MOD(my_id,3)=MOD(TO_DAYS(NOW()),3)

这种分组可以轻松改变,只需更改" 3"无论你想要什么(小心你都需要改变" 3" BOTH MOD() s)

答案 2 :(得分:0)

    SELECT * FROM ints;
    +---+
    | i |
    +---+
    | 0 |
    | 1 |
    | 2 |
    | 3 |
    | 4 |
    | 5 |
    | 6 |
    | 7 |
    | 8 |
    | 9 |
    +---+

    SELECT * FROM ints WHERE MOD(i,3) = MOD(DATEDIFF(CURDATE(),'2015-03-20'),3);
    +---+
    | i |
    +---+
    | 1 |
    | 4 |
    | 7 |
    +---+

    SELECT * FROM ints WHERE MOD(i,3) = MOD(DATEDIFF(CURDATE(),'2015-03-21'),3);
    +---+
    | i |
    +---+
    | 0 |
    | 3 |
    | 6 |
    | 9 |
    +---+

    SELECT * FROM ints WHERE MOD(i,3) = MOD(DATEDIFF(CURDATE(),'2015-03-22'),3);
    +---+
    | i |
    +---+
    | 2 |
    | 5 |
    | 8 |
    +---+

    SELECT * FROM ints WHERE MOD(i,3) = MOD(DATEDIFF(CURDATE(),'2015-03-23'),3);
    +---+
    | i |
    +---+
    | 1 |
    | 4 |
    | 7 |
    +---+

Obviously, add 1 to the calculation if necessary.