我有这种形式的数据:
user_id event started ended date
1 started 1 0 3/1/2018
1 ended 0 1 3/2/2018
2 started 1 0 3/5/2018
2 ended 0 1 3/22/2018
3 started 1 0 3/25/2018
0/1还有其他事件和列,但它们无关紧要。
我试图让每个用户从开始到结束需要多长时间。
我尝试了datediff(day, case when started=1 then date end, case when ended=1 then date end)
,但由于它们位于不同的行上,因此无效。除了()之外的某些东西可以起作用,但这显然不是一个有效的功能。
提前致谢!
答案 0 :(得分:1)
假设您在启动之前无法结束,您只需要MIN& MAX为窗口聚合:
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
Toast.makeText(UITestsActivity.this,
"YOU CLICKED ENTER KEY",
Toast.LENGTH_LONG).show();
return true;
}
return super.dispatchKeyEvent(e);
};
使用此功能,您也可以添加任何其他列。
如果一个结果行也可以,则可以进行简单聚合:
select user_id,
datediff(day,
min(date) over (partition by user_id),
max(date) over (partition by user_id))
from myTable
where event in ('started', 'ended')
答案 1 :(得分:0)
您可以使用user_id
列内部加入表格:
SELECT a.[user_id]
, a.[date] AS StartDate
, b.EndDate
, DATEDIFF(DAY, a.[date], b.EndDate) AS DateDifference
FROM dbo.TableNameHere AS a
INNER JOIN
(
SELECT [user_id]
, [date] AS EndDate
FROM dbo.TableNameHere
WHERE [ended] = 1
) AS b
ON a.[user_id] = b.[user_id]
WHERE a.[started] = 1
在上面的示例中,除了SELECT
之外,您并不需要第一个DateDifference
中的任何列,我只是让它们在我的测试中可见。