Обсуждение: ORDER BY TIMESTAMP_column ASC, NULL first

Поиск
Список
Период
Сортировка

ORDER BY TIMESTAMP_column ASC, NULL first

От
Fredrik Wendt
Дата:
Hi!

I read posts telling me that NULL values are considered greater than
non-null values. Fine. Is there a way to explicitly reverse this?

I have the situation where a table holds IP-addresses. The table has
column of type timestamp, called assignedAt, which tells when the
address was assigned to a computer in our network.
What I'd like to do, is to get an IP-address that hasn't yet been
assigned to anyone, or the one with the smallest assignedAt (most likely
to not be in use).

CREATE TABLE IPv4Address (id        SERIAL PRIMARY KEY,address        INET NOT NULL UNIQUE,assignedAt    TIMESTAMP
);

The query to use would be,
SELECT ip.id FROM IPv4Address ip ORDER BY assignedAt ASC LIMIT 1;

with the exception that this returns rows with NULL at the end, instead
of at the beginning which is what I'd like.

How do achieve this with one query? I'm using Postgres 7.4.

And oh, I'm not on the list so please cc my adress in any replies!


Thanks in advance,
Fredrik Wendt


Re: ORDER BY TIMESTAMP_column ASC, NULL first

От
Tomasz Myrta
Дата:
Dnia 2004-02-12 11:06, Użytkownik Fredrik Wendt napisał:

> Hi!
> 
> I read posts telling me that NULL values are considered greater than
> non-null values. Fine. Is there a way to explicitly reverse this?

Sure, choose combination you need:

order by some_value is null asc/desc, some_value asc/desc

Regards,
Tomasz Myrta



Re: ORDER BY TIMESTAMP_column ASC, NULL first

От
Stephan Szabo
Дата:
On Thu, 12 Feb 2004, Fredrik Wendt wrote:

> I read posts telling me that NULL values are considered greater than
> non-null values. Fine. Is there a way to explicitly reverse this?

Not directly, but I think ORDER BY assignedAt IS NOT NULL, assignedAt ASC
will give the ordering you want at the cost of probably not using an index
on assignedAt.


Re: ORDER BY TIMESTAMP_column ASC, NULL first

От
Rod Taylor
Дата:
On Thu, 2004-02-12 at 05:06, Fredrik Wendt wrote:
> Hi!
> 
> I read posts telling me that NULL values are considered greater than
> non-null values. Fine. Is there a way to explicitly reverse this?

ORDER BY column IS NOT NULL, column ASC;



Re: ORDER BY TIMESTAMP_column ASC, NULL first

От
"Denis"
Дата:
Hi Rod,

Try this....

ace=> create table test(name text, age int );
CREATE
ace=> insert into test values ('Denis',26);
INSERT 1823531 1
ace=> insert into test values (null,26);
INSERT 1823532 1
ace=> select * from test order by name;name  | age
-------+-----Denis |  26      |  26
(2 rows)

ace=> select * from test order by coalesce(name,'');name  | age
-------+-----      |  26Denis |  26     

HTH

Thanx

Denis

----- Original Message ----- 
From: "Rod Taylor" <pg@rbt.ca>
To: "Fredrik Wendt" <fredrik@csbnet.se>
Cc: <pgsql-sql@postgresql.org>
Sent: Monday, February 16, 2004 12:32 AM
Subject: Re: [SQL] ORDER BY TIMESTAMP_column ASC, NULL first


> On Thu, 2004-02-12 at 05:06, Fredrik Wendt wrote:
> > Hi!
> > 
> > I read posts telling me that NULL values are considered greater than
> > non-null values. Fine. Is there a way to explicitly reverse this?
> 
> ORDER BY column IS NOT NULL, column ASC;
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)




Re: ORDER BY TIMESTAMP_column ASC, NULL first

От
Bruno Wolff III
Дата:
On Thu, Feb 12, 2004 at 11:06:26 +0100, Fredrik Wendt <fredrik@csbnet.se> wrote:
> 
> The query to use would be,
>     
> SELECT ip.id FROM IPv4Address ip ORDER BY assignedAt ASC LIMIT 1;
> 
> with the exception that this returns rows with NULL at the end, instead
> of at the beginning which is what I'd like.
> 
> How do achieve this with one query? I'm using Postgres 7.4.

SELECT ip.id FROM IPv4Address ip ORDER BY assignedAt IS NULL, assignedAt ASC LIMIT 1;