我需要帮助计算列值增加和减少特定ID的次数。
我的数据看起来像这样
ID Month Value1
1 1 500
1 2 500
1 3 500
1 4 1000
2 1 1000
2 2 500
2 3 500
2 4 1000
3 1 6000
3 2 6000
3 3 5000
3 4 5000
我想要这个
ID Increases Decreases
1 1 0
2 1 1
3 0 1
谢谢!
答案 0 :(得分:1)
使用<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<LinearLayout
android:id="@+id/wrapper"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<ImageView
android:id="@+id/imgPhotoSendVC"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dip"
android:paddingLeft="10dip"
android:visibility="gone"/>
<TextView
android:id="@+id/comment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_margin="5dip"
android:paddingLeft="10dip"
android:text="Mensaje Chat"
android:textColor="@android:color/primary_text_light"
android:textSize="15dp"
android:textStyle="normal"
/>
<ProgressBar
style="?android:attr/progressBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBarEnvioFoto"
android:visibility="gone"/>
</LinearLayout>
</LinearLayout>
函数创建计算列,该函数从下一行获取值。然后根据计算的列汇总。
lead
答案 1 :(得分:1)
仅限于乐趣;)sign函数:
SELECT id, SUM (SIGN (di + 1)) incCount, SUM (SIGN (di - 1)*-1) decCount
FROM (SELECT id, SIGN (LEAD (value1, 1) OVER (PARTITION BY id ORDER BY id, month) - value1) di FROM TABLENAME)
WHERE di <> 0
GROUP BY id
答案 2 :(得分:0)
以下是基于lag
窗口聚合函数的解决方案:
SELECT id,
count(CASE WHEN value > prev_value THEN 1 END) Increases,
count(CASE WHEN value < prev_value THEN 1 END) Decreases
FROM (SELECT id,
month,
value,
lag(value) OVER (PARTITION BY id ORDER BY month) AS prev_value
FROM mytable)
GROUP BY id
如果你只是运行内部查询,你可以看到它如何将前一个值放在每个记录的当前值旁边。