本文是《使用SQL计算宝宝每次吃奶的时间间隔》的续篇,因为我工作繁忙,时常不能及时帮助媳妇儿记录,为了让不懂数据库的媳妇儿也可以自己用手机熟练操作。我继续做了一些修正和封装:

  • 1.给媳妇儿的手机下载一个terminal终端软件termius,实现只需打开app就可以连接到环境;
  • 2.跟媳妇儿进一步沟通需求,按她能够接受的使用习惯来修正并封装程序,原则是尽可能的简化操作。

先来看下改进后最终的使用效果:

--1.手机上打开termius软件,点击进入到终端,输入 h 可以看到所有命令的说明:
[oracle@jystdrac1 ~]$ h
**Command for Baby's feed_time:**
Usage:
v - View Today's Result.
vv <'mmdd'> - View one day's Result.
i - Insert a row using current time.
ii <'mmdd hh24:mi'> - Insert a row using input time.
d <id> - Delete a mistake row by id.
u <label> <id> - Update a mistake row by id.
h - Help --2.输入 v 可以看到今天的喂奶时间和间隔:
[oracle@jystdrac1 ~]$ v
View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
55 12-15 07:35 N 207 3.45
56 12-15 10:40 N 185 3.08
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01 8 rows selected. --3.输入 i 可以直接以当前系统时间插入一条数据,并显示插入后的结果:
[oracle@jystdrac1 ~]$ i
Insert a row using current time: 1 row created. Commit complete. View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
55 12-15 07:35 N 207 3.45
56 12-15 10:40 N 185 3.08
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01
94 12-15 23:02 N 227 3.78 9 rows selected. --4.输入 d <id> 可以删除id对应的那行记录,并显示删除后的结果:
[oracle@jystdrac1 ~]$ d 94
Delete a mistake row by id:
Enter value for id: old 1: delete from t_baby where id = &id
new 1: delete from t_baby where id = 94 1 row deleted. Commit complete. View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
55 12-15 07:35 N 207 3.45
56 12-15 10:40 N 185 3.08
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01 8 rows selected. --5.输入 u <label> <id> 可以更新指定id的label值,比如将id=55的记录label值修改为'L',代表这次喂奶量很少,不参与计算
[oracle@jystdrac1 ~]$ u l 55
Update a mistake row by id:
Enter value for label: Enter value for id: old 1: update t_baby set label = upper('&label') where id = &id
new 1: update t_baby set label = upper('l') where id = 55 1 row updated. Commit complete. View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
56 12-15 10:40 N 392 6.53
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01 7 rows selected. --6.输入 u <label> <id> 可以更新指定id的label值,比如将id=55的记录label值修改回'N',代表这次喂奶量正常,参与计算
[oracle@jystdrac1 ~]$ u n 55
Update a mistake row by id:
Enter value for label: Enter value for id: old 1: update t_baby set label = upper('&label') where id = &id
new 1: update t_baby set label = upper('n') where id = 55 1 row updated. Commit complete. View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
55 12-15 07:35 N 207 3.45
56 12-15 10:40 N 185 3.08
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01 8 rows selected. --7.输入 ii <'mmdd hh24:mi'> 可以插入指定日期和时间
[oracle@jystdrac1 ~]$ ii '1215 23:00'
Insert a row using input time(mmdd mi:ss) eg: 1215 10:00
Enter value for feed_time: old 1: insert into t_baby(id,feed_time) values(s1.nextval,to_date('&feed_time','mmdd hh24:mi'))
new 1: insert into t_baby(id,feed_time) values(s1.nextval,to_date('1215 23:00','mmdd hh24:mi')) 1 row created. Commit complete. View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
55 12-15 07:35 N 207 3.45
56 12-15 10:40 N 185 3.08
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01
95 12-15 23:00 N 225 3.74 9 rows selected. --8.删除id=95的这条测试记录
[oracle@jystdrac1 ~]$ d 95
Delete a mistake row by id:
Enter value for id: old 1: delete from t_baby where id = &id
new 1: delete from t_baby where id = 95 1 row deleted. Commit complete. View Today's Result: ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
53 12-15 01:00 N 140 2.33
54 12-15 04:08 N 188 3.13
55 12-15 07:35 N 207 3.45
56 12-15 10:40 N 185 3.08
69 12-15 13:16 N 156 2.6
70 12-15 14:32 N 76 1.27
82 12-15 17:14 N 163 2.71
83 12-15 19:15 N 121 2.01 8 rows selected. --9.使用 vv 'mmdd' 可以显示指定日期的喂奶间隔情况:
[oracle@jystdrac1 ~]$ vv 1214
View Today's Result:
Enter value for feed_time: Enter value for feed_time: old 2: from (select t.*, lag(feed_time) over(order by id) l_time from t_baby t where label <> 'L') where feed_time >= to_date('&feed_time','mmdd') and feed_time < to_date('&feed_time','mmdd') + 1
new 2: from (select t.*, lag(feed_time) over(order by id) l_time from t_baby t where label <> 'L') where feed_time >= to_date('1214','mmdd') and feed_time < to_date('1214','mmdd') + 1 ID FEED_TIME L LAG(min) LAG(h)
---------- ----------- - ---------- ----------
41 12-14 01:55 N 265 4.42
42 12-14 04:58 N 183 3.05
43 12-14 08:25 N 207 3.45
44 12-14 11:23 N 178 2.97
45 12-14 12:23 N 60 1
46 12-14 15:00 N 157 2.62
47 12-14 17:22 N 142 2.37
48 12-14 18:45 N 83 1.38
49 12-14 22:40 N 235 3.92 9 rows selected.

经过一番演示,媳妇儿的反馈是非常满意的,实际她最常用的还是v和i,非常方便,其他命令偶尔使用,其实只需记住h可以获取到帮助即可。下面将本次的修正和封装过程记录一下:

1.环境变量配置别名

为了简化操作,我将环境变量设置一些别名。

[oracle@jystdrac1 ~]$ cat ~/.bash_profile
# 这里省略原有环境变量内容,下面为在源文件基础上追加的内容:
# Alias for baby's feed_time:
alias h=/home/oracle/baby_readme.sh
alias v=/home/oracle/baby_view.sh
alias i=/home/oracle/baby_insert.sh
alias d=/home/oracle/baby_delete.sh
alias u=/home/oracle/baby_update.sh
alias ii=/home/oracle/baby_insert_diy.sh
alias vv=/home/oracle/baby_view_diy.sh

2.系统shell脚本

##baby_readme.sh

vi baby_readme.sh

#!/bin/bash
# script:baby_readme.sh
# version:1.01
#-------------------------------------------------------------
echo "**Command for Baby's feed_time:**"
echo "Usage:"
echo " v - View Today's Result."
echo " vv <'mmdd'> - View one day's Result."
echo " i - Insert a row using current time."
echo " ii <'mmdd hh24:mi'> - Insert a row using input time."
echo " d <id> - Delete a mistake row by id."
echo " u <label> <id> - Update a mistake row by id."
echo " h - Help"
#-------------------------------------------------------------

baby_view.sh

vi baby_view.sh

#!/bin/bash
# script:baby_view.sh
# version:1.01
#-------------------------------------------------------------
sqlplus -S test/test <<EOF
PROMPT View Today's Result:
@v3 EOF
#-------------------------------------------------------------

baby_insert.sh

vi baby_insert.sh

#!/bin/bash
# script:baby_insert.sh
# version:1.01
#-------------------------------------------------------------
sqlplus -S test/test <<EOF
PROMPT Insert a row using current time:
@i1 PROMPT View Today's Result:
@v3 EOF
#-------------------------------------------------------------

baby_delete.sh

vi baby_delete.sh

#!/bin/bash
# script:baby_delete.sh
# version:1.01
#-------------------------------------------------------------
sqlplus -S test/test <<EOF
PROMPT Delete a mistake row by id:
@d1
$1
commit; PROMPT View Today's Result:
@v3 EOF
#-------------------------------------------------------------

baby_insert_diy.sh

vi baby_insert_diy.sh

#!/bin/bash
# script:baby_insert_diy.sh
# version:1.01
#-------------------------------------------------------------
sqlplus -S test/test <<EOF
PROMPT Insert a row using input time(mmdd mi:ss) eg: 1215 10:00
@i2
$1
commit; PROMPT View Today's Result:
@v3 EOF
#-------------------------------------------------------------

baby_update.sh

vi baby_update.sh

#!/bin/bash
# script:baby_update.sh
# version:1.01
#-------------------------------------------------------------
sqlplus -S test/test <<EOF
PROMPT Update a mistake row by id:
@u1
$1
$2
commit; PROMPT View Today's Result:
@v3 EOF
#-------------------------------------------------------------

baby_view_diy.sh

vi baby_view_diy.sh

#!/bin/bash
# script:baby_view.sh
# version:1.01
#-------------------------------------------------------------
sqlplus -S test/test <<EOF
PROMPT View one day's Result:
@v4
$1
$1 EOF
#-------------------------------------------------------------

3.底层SQL文本

--echo "v - View Today's Result."
[oracle@jystdrac1 ~]$ cat v3.sql
SELECT
id,
to_char(feed_time, 'mm-dd hh24:mi') "FEED_TIME",
label,
round((feed_time - l_time) * 24 * 60) "LAG(min)",
round((feed_time - l_time) * 24, 2) "LAG(h)"
FROM
(
SELECT
t.*,
LAG(feed_time) OVER(ORDER BY id) l_time
FROM
t_baby t
WHERE
label <> 'L'
)
WHERE
feed_time >= trunc(sysdate)
/ -- echo " vv <'mmdd'> - View one day's Result."
[oracle@jystdrac1 ~]$ cat v4.sql
SELECT
id,
to_char(feed_time, 'mm-dd hh24:mi') "FEED_TIME",
label,
round((feed_time - l_time) * 24 * 60) "LAG(min)",
round((feed_time - l_time) * 24, 2) "LAG(h)"
FROM
(
SELECT
t.*,
LAG(feed_time) OVER(ORDER BY id) l_time
FROM
t_baby t
WHERE
label <> 'L'
)
WHERE
feed_time >= TO_DATE('&feed_time', 'mmdd')
AND feed_time < TO_DATE('&feed_time', 'mmdd') + 1
/ --echo "i - Insert a row using current time."
[oracle@jystdrac1 ~]$ cat i1.sql
insert into t_baby(id,feed_time) values(s1.nextval,sysdate)
/
commit
/ --echo "ii - Insert a row using input time."
[oracle@jystdrac1 ~]$ cat i2.sql
insert into t_baby(id,feed_time) values(s1.nextval,to_date('&feed_time','mmdd hh24:mi'))
/ --echo "d - Delete a mistake row by id. "
[oracle@jystdrac1 ~]$ cat d1.sql
delete from t_baby where id = &id
/ --echo "u - Update a mistake row by id."
[oracle@jystdrac1 ~]$ cat u1.sql
update t_baby set label = upper('&label') where id = &id
/

SQL文本独立出来也方便后续需求有变化时快速更改。

使用SQL计算宝宝每次吃奶的时间间隔(续)的更多相关文章

  1. 使用SQL计算宝宝每次吃奶的时间间隔(数据保障篇)

    目前程序从功能上其实已经完全满足客户(当然我这里的客户都是指媳妇儿^_^)需求,具体可参考: 使用SQL计算宝宝每次吃奶的时间间隔 使用SQL计算宝宝每次吃奶的时间间隔(续) 那么本篇 使用SQL计算 ...

  2. 使用SQL计算宝宝每次吃奶的时间间隔

    需求:媳妇儿最近担心宝宝的吃奶时间不够规律,网上说是正常平均3小时喂奶一次,让我记录下每次的吃奶时间,分析下实际是否偏差很大,好在下次去医院复查时反馈给医生. 此外,还要注意有时候哭闹要吃奶,而实际只 ...

  3. SQL 计算列

    SQL计算列,可以解决一般标量计算(数学计算,如ColumnA*ColumnB)的问题,而子查询计算(如select sum(salary) from tableOther where id=’ABC ...

  4. sql计算经纬度得出最近距离的公式

    sql计算经纬度得出最近距离的公式 //根据经纬度计算两点距离 mappoint //数据库已有字段,商家经纬度 实例:113.272148,23.147299 $lon = "" ...

  5. SQL计算时间差并排除周末

    SQL计算时间差并排除周末 CREATE FUNCTION DI_FN_GET_WorkDay (@begin DATETIME , @end DATETIME ) RETURNS int BEGIN ...

  6. 【HANA系列】SAP HANA SQL计算两个日期的差值

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL计算两个 ...

  7. 【HANA系列】SAP HANA SQL计算某日期是当月的第几天

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL计算某日 ...

  8. 【HANA系列】SAP HANA SQL计算某日期是当年的第几天

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL计算某日 ...

  9. Java工作流引擎节点接收人设置“按自定义SQL计算”系列讲解

    关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单  拖拽式表单 工作流系统CCBPM节点访问规则接收人规则 适配数据库: o ...

随机推荐

  1. ThreadLocal<T> 源码解析

    在activeJDBC框架内部的实现中看到了 ThreadLocal 这个类,记录下了每个线程独有的连接 private static final ThreadLocal<HashMap< ...

  2. (C#)WPF:Margin属性和Padding属性的介绍

    1.在进行界面设计时,Margin 和Padding都是对边距进行限制的,其区别在于“一个主外,一个主内”. Margin (边缘)是约束控件与容器控件的边距,设置值分别代表左上右下,使用 Margi ...

  3. pat 1149 Dangerous Goods Packaging(25 分)

    1149 Dangerous Goods Packaging(25 分) When shipping goods with containers, we have to be careful not ...

  4. 【MongoDB】2019年MongoDB中文社区广州大会,干货满满的分享活动

    1 介绍 MongoDB中文社区(mongoing.com)是大中华区获得官方认可的中文社区,11月23日下午,在广州举办了线下用户大会,带给大家一手干货和实践. 2 大会议程 大会组织者对时间的把控 ...

  5. C# 彻底搞懂async/await

    前言 Talk is cheap, Show you the code first! private void button1_Click(object sender, EventArgs e) { ...

  6. Python自动化办公之操作Excel文件

    模块导入 import openpyxl 读取Excel文件 打开Excel文件 workbook = openpyxl.load_workbook("test.xlsx") 输出 ...

  7. C#泛型自己的理解和总结

    万事开头难,今天先从随笔开始,记录工作中平时不太注意到的知识点.今天开始说下泛型. 泛型在我们项目中很是常见,使用很广泛,我觉的它有以下几个优点. 1.安全性. 2.性能. 3.二进制代码的重用. 4 ...

  8. PostGIS 安装教程(Linux)(一)

    ##本文分两部分,第一部分讲linux下postgresql的安装,第二部分讲postgis的安装 ##感谢作者:https://www.linuxidc.com/Linux/2017-10/1475 ...

  9. pdf 在线预览之 pdfobject插件

    支持到ie9 可以不用安装  如果安装 npm i pdfobject 第一步:引入pdfObject包 申明一个变量 const { PDFObject } = require("../. ...

  10. .NET Core 跨平台 GUI 开发之 GTtkSharp 初级篇

    .NET Core 跨平台 GUI 开发之 GTtkSharp 初级篇 本文作为初级篇,适合已经安装好.NET Core 环境以及 Gtk 环境,并具备了 C#开发基础知识,能跑一些简单的例子,希望更 ...