我们有一个列为membership_end的用户表,顾名思义就是用户成员资格结束的日期。现在有些用户从不购买会员资格,因此该字段为空。对于某些用户,该字段是过去的(成员资格已过期)。 我需要的是首先对活动成员进行排序(按membership_end日期desc排序),然后按照某种独立排序顺序对其余用户进行排序。基本上我们需要在活跃的会员身上显示出来。
SELECT * FROM accounts where membership_end>=now()
order by membership_end desc
union
???
提前致谢
好的,稍微清理一下。
SELECT * FROM accounts where membership_end>=now()
order by membership_end desc
给了我们12位活跃会员,这很好。然后我们有这个:
SELECT * FROM accounts where membership_end<now()
order by id desc
我们只需要在一个查询中将这两者结合起来。就是这样。
编辑: 其实我弄清楚了。这很简单。
SELECT id,membership_end 来自帐户 ORDER BY membership_end&gt; = NOW()DESC,id DESC
没有工会。没有复杂的问题: - )
答案 0 :(得分:0)
您可以将空值排序为第一个,这样您就可以避免使用联合:
SELECT membership_end FROM accounts
where membership_end>=now() or membership_end is null
ORDER BY [membership_end] IS NULL DESC, [membership_end] DESC
答案 1 :(得分:0)
如果您不想要重复,我建议您这样做。我不知道你想用什么条件来过滤成员资格为null的成员资格,但是如果所有我会这样做的话:
SELECT membership_end FROM accounts where membership_end>=now() or membership_end is null order by membership_end desc
降序排序应该将具有null membership_end的成员放在列表的末尾,这样你可能想要添加额外的排序。
答案 2 :(得分:0)
尝试这样的事情:
.md-virtual-repeat-container.md-orient-vertical {
height: calc(100% - 100px);
}
这将结合table1和table2
重要的位是table1的1个字段和table2的1个字段。它必须是一样的。
答案 3 :(得分:0)
这里有两个技巧1)通过创建一个组合日期+ id字段将id与日期相关联,历史和空值在未来被赋予了种子日期,以避免与未来日期成员重叠(您可能希望将其推出)2 )将srce数分配给联合语句。
/*
create table m (id int, enddte date);
truncate table m;
insert into m values
(1,null),(2,'2016-10-01'),(3,'2016-11-10'),(4,'2016-02-01'),(5,'2016-03-01'),(6,null);
*/
select * from
(
select 1 as srce,m.id,m.enddte ,
year(m.enddte) * 10000 + month(m.enddte) * 100 + m.id as uniqueid
from m
where m.enddte >= now()
) s
union
(
select 2,id,enddte,
year(cast('2050-01-01' as date)) * 10000 + month(cast('2050-01-01' as date)) * 100 + id
from m
where m.enddte < now() or m.enddte is null
)
order by srce,uniqueid desc
或者你可以在没有工会的情况下做到这一点
select * from
(
select case
when enddte >= now() then 1
else 2
end as srce,
id, enddte,
case
when enddte >= now() then year(m.enddte) * 10000 + month(m.enddte) * 100 + m.id
else year(cast('2050-01-01' as date)) * 10000 + month(cast('2050-01-01' as date)) * 100 + id
end as uniqueid
from m
) s order by srce,uniqueid desc