7

Considering following table that doesn't have any primary key, can I select every other row?

col1      col2
 2         a
 1         b
 3         c
 12        g

first select must find: 2, 3

second select must find: 1, 12

is that possible?

Dharman
  • 30,962
  • 25
  • 85
  • 135
  • 1
    Consider this related answer: http://stackoverflow.com/questions/2997458/how-to-show-only-even-or-odd-rows-in-sql-server-2008 – hbhakhra Feb 19 '13 at 19:29

5 Answers5

8

In unique MySQL fashion:

select  *
from    (
        select  *
        ,       @rn := @rn + 1 as rn
        from    Table1
        join    (select @rn := 0) i
        ) s
where   rn mod 2 = 0 -- Use = 1 for the other set

Example at SQL Fiddle.

Andomar
  • 232,371
  • 49
  • 380
  • 404
2

Try this. I've adapted it from the answer linked below. I tested it on SQLFiddle and it appears to work.

http://sqlfiddle.com/#!2/0bccf/28
http://sqlfiddle.com/#!2/0bccf/29

Odd Rows:

SELECT x.*
FROM (
     SELECT @rownum:=@rownum+1 rownum, t.*
     FROM (SELECT @rownum:=0) r, table t
) x
WHERE MOD(x.rownum, 2) = 1

Even Rows:

SELECT x.*
FROM (
     SELECT @rownum:=@rownum+1 rownum, t.*
     FROM (SELECT @rownum:=0) r, table t
) x
WHERE MOD(x.rownum, 2) = 0

Adapted from: MySQL row number

Community
  • 1
  • 1
Matthew Shea
  • 567
  • 5
  • 14
2

yes possible using temp variable

Example :

set @a := 0;
select * from car_m_city  WHERE mod((@a:=@a+1), 2) = 1

Explanation :

here in sql we declare @a( set @a := 0;) temp variable.(@a:=@a+1) now @a increment by 1.jsut like simple way to check odd or even

mod((@a:=@a+1), 2) = 1 for odd data

mod((@a:=@a+1), 2) = 0 for even data

Parth Chavda
  • 1,819
  • 1
  • 23
  • 30
2

This works for me.

    SET @row_number = 0;

    select* from (
        SELECT 
        (@row_number:=@row_number + 1) AS num, col1,col2
    FROM
        TABLE1
        ) as t WHERE num%2=0

You can use mod 1 for odd or mod 0 for even rows

Mohammad Arshi
  • 386
  • 2
  • 9
1

This should work for MySQL:

SELECT col1, col2
FROM (
   SELECT col1, col2, @rowNumber:=@rowNumber+ 1 rn
   FROM YourTable
      JOIN (SELECT @rowNumber:= 0) r
) t 
WHERE rn % 2 = 1

This uses % which is the MOD operator.

And here is the sample fiddle: http://sqlfiddle.com/#!2/cd31b/2

sgeddes
  • 62,311
  • 6
  • 61
  • 83