显示有关多行的单个日期标题(Recycleview)

时间:2019-01-06 17:01:48

标签: sql list date android-recyclerview

大家晚上

我目前有一个简单的回收视图适配器,该适配器由SQL Lite数据库填充。用户可以从应用程序将信息添加到数据库中,然后在回收视图内构建一行。当您运行该应用程序时,它将在每一行的正上方显示其自己的日期。我现在希望通过仅在多个记录上方将单个日期显示为标题来使应用程序看起来更专业。

到目前为止,我已经构建了2个自定义设计,一个自定义设计与行一起显示标题,另一个自定义标准行,没有内置标题。我还了解如何在单个适配器中实现两种布局。

我还将单行合并到数据库中,该行仅以可以订购数据库的方式存储日期,例如20190101

现在我的关键问题是,使用SQL Lite数据库中的信息填充适配器时,如何获取适配器以检查先前的记录是否具有相同的日期。如果记录具有相同的日期,那么它不需要显示带有标题的自定义行,但是如果它具有新的日期,那么它会显示吗?

谢谢

///////////////////////////////////////////////// ////////////////////////////

跟进Krokodilko的问题,我花了最后一个小时试图将您的实现应用于我的SQL Lite,但仍然找不到组合。

下面是我当前用来简单地获取所有结果的原始代码SQL Lite行。

Cursor cursor =  sqLiteDatabase.rawQuery("SELECT * FROM " + Primary_Table + " " , null);

1 个答案:

答案 0 :(得分:0)

首先,您必须定义一个顺序,该顺序将用于确定上一条记录和下一条记录。据我了解,您只是在使用date列。

然后查询很简单-使用LAG analytic function从上一行中选择列值,这是一个简单演示的链接(单击“运行”按钮):
https://sqliteonline.com/#fiddle-5c323b7a7184cjmyjql6c9jh

DROP TABLE IF EXISTS d;
CREATE TABLE d(
  d date
);
insert into d values ( '2012-01-22'),( '2012-01-22'),( '2015-01-22');

SELECT *,
      lag( d ) OVER (order by d ) as prev_date,
      CASE WHEN d = lag( d ) OVER (order by d )
           THEN 'Previous row has the same date'
           ELSE 'Previous row has different date'
      END as Compare_status
FROM d
ORDER BY d;

在上面的演示中,d子句中的OVER (order by d )列用于确定LAG函数使用的行的顺序。