Room database Kotlin Получить данные за этот месяц
Мне нужно выполнить запрос в БД который отнимет значения суммы одного столбца от другого. Хотел бы отнимать значения которые были записаны только в этом месяце. Попробовал много вариантов, и либо пробовал неправильно либо не нашел ничего подобного.
Это мой Dao
@Dao
interface Dao {
@Insert
fun InsertItemIncome(item: Income)
@Insert
fun InsertItemExpence(item: Expence)
@Query("DELETE FROM income")
fun deleteAll()
@Query("SELECT SUM(sum) AS value FROM income")
fun getSumIncome(): Flow<Float?>
@Query("SELECT SUM(sum) AS value FROM expence")
fun getSumExpence(): Flow<Float?>
@Query("SELECT (SELECT SUM(sum) FROM income WHERE strftime('%m', col_date, unixepoch) = '03' AND \n" +
"strftime('%Y', col_date, unixepoch) = 'now') - (SELECT SUM(sum) s2 FROM expence)")
}
Это мои таблицы
Income
@Entity(tableName = "income")
data class Income(
@PrimaryKey(autoGenerate = true)
var id: Int? = null,
@ColumnInfo(name = "date")
var date: Long?,
@ColumnInfo(name = "type")
var type: String,
@ColumnInfo(name = "sum")
var sum: Float,
)
Expence
@Entity(tableName = "expence")
data class Expence(
@PrimaryKey(autoGenerate = true)
var id: Int? = null,
@ColumnInfo(name = "date")
var date: Long?,
@ColumnInfo(name = "type")
var type: String,
@ColumnInfo(name = "sum")
var sum: Float,
)
Данные в поле date записываю в формате timestamp
, для этого использую TypeConvertor
object Converters {
@TypeConverter
fun fromTimestamp(value: Long?): Date? {
return value?.let { Date(it) }
}
@TypeConverter
fun dateToTimestamp(date: Date?): Long? {
return if (date == null) null else date.getTime()
}
}
Источник: Stack Overflow на русском