Advertisement
roganhamby

Annual Report - Sections G & H - old

Jul 23rd, 2015
221
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2. Section G: LIBRARY USERS, VISITS, COMPUTER AND INTERNET
  3.  
  4. Registered Users
  5. G1 Adult__________________________
  6. G2 Juvenile__________________________
  7. G3 TOTAL (G1 + G2)__________________________
  8.  
  9. counts patron accounts under the age of 18 by the end of the fiscal year where the age is blank due to the dob
  10. being null because we used to allow that. we look to see if the account is labeled as juvenile in the description,
  11. this will change after the Fall 2015 profile consolidaiton and we should be able to do it more cleanly off
  12. pgt.name
  13.  
  14. I check for dob first becuase it could be an adult in a child account but I assume if the dob is null that it is on the
  15. exception list above and a child, I look to see if it's marked deleted and if it was marked past the cut off
  16. and if it was created in the last three years
  17.  
  18. */
  19.  
  20. select a.library as "Library", a.adults as "Adults - G1", j.juveniles as "Juveniles - G2", a.adults+j.juveniles as "Total - G3"
  21. from (
  22. SELECT org2.shortname as "library", COUNT(usr.id) AS "adults"
  23. FROM actor.usr usr
  24. JOIN actor.org_unit org ON org.id = usr.home_ou
  25. JOIN actor.org_unit org2 ON org2.id = org.parent_ou
  26. join permission.grp_tree pgt on pgt.id = usr.profile
  27. WHERE
  28. (
  29. date(usr.create_date) >= '2012-07-01'
  30. OR
  31. (
  32. usr.deleted = FALSE
  33. AND
  34. date(usr.expire_date) >= '2012-07-01'
  35. )
  36. )
  37. AND
  38. (
  39. date(usr.dob) <= date('1997-07-01')
  40. OR
  41. (dob IS NULL AND pgt.description not ilike '%juv%')
  42. )
  43. GROUP BY 1
  44. ORDER BY 1
  45. ) a
  46. join (
  47. SELECT org2.shortname as "library", COUNT(usr.id) AS "juveniles"
  48. FROM actor.usr usr
  49. JOIN actor.org_unit org ON org.id = usr.home_ou
  50. JOIN actor.org_unit org2 ON org2.id = org.parent_ou
  51. join permission.grp_tree pgt on pgt.id = usr.profile
  52. WHERE
  53. (
  54. date(usr.create_date) >= '2012-07-01'
  55. OR
  56. (
  57. usr.deleted = FALSE
  58. AND
  59. date(usr.expire_date) >= '2012-07-01'
  60. )
  61. )
  62. AND
  63. (
  64. date(usr.dob) >= date('1997-07-01')
  65. OR
  66. -- next year after next round we should be able to do this more cleanly off pgt.name
  67. (dob IS NULL AND pgt.description ilike '%juv%')
  68. )
  69. GROUP BY 1
  70. ORDER BY 1
  71. ) j on j.library = a.library;
  72.  
  73.  
  74.  
  75. /*
  76.  
  77.  
  78. Section H: REFERENCE, CIRCULATION
  79.  
  80. Circulation Transactions and Interlibrary Loan H2 - H11 (In all sections, if no circulation to report, enter 0)
  81. Juvenile Circulation (may include Teen/YA circulation per library policy)
  82. H2 Print__________________________
  83. H3 Non-Print (not books or electronic/downloadable items)__________________________
  84. H4 TOTAL JUVENILE CIRCULATION (H2 + H3)__________________________
  85.  
  86. Adult Circulation (may include Teen/YA circulation per library policy)
  87. H5 Print__________________________
  88. H6 Non-Print (not books or electronic/downloadable items)__________________________
  89. H7 TOTAL (H5 + H6)__________________________
  90.  
  91. */
  92.  
  93. -------------------------------------- circ by material format from leader and audience
  94. -------------------------------------- looks for a = language material = book
  95. -------------------------------------- i = audio books, j = music, g = projected medium aka 'not a' = non-print
  96. -------------------------------------- non-cat circs are all added to print materials
  97. ------------------------------------------------------------------------------------------------------------------
  98. ------------------------------------------------------------------------------------------------------------------
  99.  
  100. drop table if exists rogan.action_circulation;
  101. drop table if exists rogan.circ_ldrs;
  102.  
  103. create table rogan.action_circulation as
  104. select * from action.circulation circ
  105. WHERE date(circ.xact_start) >= '2014-07-01' AND date(circ.xact_start) <= '2015-06-30';
  106.  
  107. create table rogan.circ_ldrs as
  108. SELECT circ.id as "circ_id", SUBSTRING(meta.VALUE FROM 7 FOR 1) as "circ_ldr"
  109. FROM rogan.action_circulation circ
  110. JOIN asset.copy copy ON copy.id = circ.target_copy
  111. JOIN asset.call_number call ON call.id = copy.call_number
  112. LEFT OUTER JOIN metabib.real_full_rec meta ON meta.record = call.record
  113. AND meta.tag = 'LDR'
  114. ;
  115.  
  116. SELECT juv_a.shortname as "Library",
  117. juv_a.circs as "Juvenile Print Circs - H2", juv_not_a.circs as "Juvenile Non-Print Circs - H3",
  118. juv_a.circs+juv_not_a.circs+coalesce(non.circs,0) as "Total Juvenile Circs - H4",
  119. adult_a.circs as "Adult Print Circs - H5", adult_not_a.circs as "Adult Non-Print Circs - H6",
  120. adult_a.circs+adult_not_a.circs+coalesce(non.circs,0) as "Total Adult Circs - H7"
  121. FROM (
  122. SELECT COUNT(circ.id) AS circs, org2.shortname AS shortname
  123. FROM rogan.action_circulation circ
  124. JOIN actor.org_unit org ON org.id = circ.circ_lib
  125. JOIN actor.org_unit org2 ON org2.id = org.parent_ou
  126. JOIN asset.copy copy ON copy.id = circ.target_copy
  127. JOIN asset.call_number call ON call.id = copy.call_number
  128. join asset.copy_location acl on acl.id = copy.location
  129. LEFT OUTER JOIN rogan.circ_ldrs ldrs ON ldrs.circ_id = circ.id
  130. WHERE ldrs.circ_ldr = 'a'
  131. and ( acl.name ilike '%juv%' or acl.name ilike '%young%' )
  132. GROUP BY 2
  133. ) juv_a
  134. left join (
  135. SELECT COUNT(circ.id) AS circs, org2.shortname AS shortname
  136. FROM rogan.action_circulation circ
  137. JOIN actor.org_unit org ON org.id = circ.circ_lib
  138. JOIN actor.org_unit org2 ON org2.id = org.parent_ou
  139. JOIN asset.copy copy ON copy.id = circ.target_copy
  140. JOIN asset.call_number call ON call.id = copy.call_number
  141. join asset.copy_location acl on acl.id = copy.location
  142. LEFT OUTER JOIN rogan.circ_ldrs ldrs ON ldrs.circ_id = circ.id
  143. WHERE ldrs.circ_ldr = 'a'
  144. and ( acl.name not ilike '%juv%' or acl.name not ilike '%young%' )
  145. GROUP BY 2
  146. ) adult_a on adult_a.shortname = juv_a.shortname
  147. left join (
  148. SELECT COUNT(circ.id) AS circs, org2.shortname AS shortname
  149. FROM rogan.action_circulation circ
  150. JOIN actor.org_unit org ON org.id = circ.circ_lib
  151. JOIN actor.org_unit org2 ON org2.id = org.parent_ou
  152. JOIN asset.copy copy ON copy.id = circ.target_copy
  153. JOIN asset.call_number call ON call.id = copy.call_number
  154. join asset.copy_location acl on acl.id = copy.location
  155. LEFT OUTER JOIN rogan.circ_ldrs ldrs ON ldrs.circ_id = circ.id
  156. WHERE ldrs.circ_ldr != 'a'
  157. and ( acl.name ilike '%juv%' or acl.name ilike '%young%' )
  158. GROUP BY 2
  159. ) juv_not_a on juv_not_a.shortname = juv_a.shortname
  160. left join (
  161. SELECT COUNT(circ.id) AS circs, org2.shortname AS shortname
  162. FROM rogan.action_circulation circ
  163. JOIN actor.org_unit org ON org.id = circ.circ_lib
  164. JOIN actor.org_unit org2 ON org2.id = org.parent_ou
  165. JOIN asset.copy copy ON copy.id = circ.target_copy
  166. JOIN asset.call_number call ON call.id = copy.call_number
  167. join asset.copy_location acl on acl.id = copy.location
  168. LEFT OUTER JOIN rogan.circ_ldrs ldrs ON ldrs.circ_id = circ.id
  169. WHERE ldrs.circ_ldr != 'a'
  170. and ( acl.name not ilike '%juv%' or acl.name not ilike '%young%' )
  171. GROUP BY 2
  172. ) adult_not_a on adult_not_a.shortname = juv_a.shortname
  173. left join ( SELECT coalesce(count(circ.id),0) AS circs, org2.shortname AS shortname
  174. FROM action.non_cataloged_circulation circ
  175. left JOIN actor.org_unit org ON org.id = circ.circ_lib
  176. JOIN actor.org_unit org2 ON org2.id = org.parent_ou
  177. where date(circ.circ_time) >= '2014-07-01' AND date(circ.circ_time) <= '2015-06-30'
  178. GROUP BY 2
  179. ) non on non.shortname = juv_a.shortname
  180. ;
  181.  
  182. drop table if exists rogan.action_circulation;
  183. drop table if exists rogan.circ_ldrs;
  184.  
  185. /*
  186.  
  187. -- original form before I created the other tables to query from so it wouldn't take so long to run
  188.  
  189. SELECT juv_a.shortname as "Library",
  190. juv_a.circs as "Juvenile Print Circs - H2", juv_not_a.circs as "Juvenile Non-Print Circs - H3",
  191. juv_a.circs+juv_not_a.circs as "Total Juvenile Circs - H4",
  192. adult_a.circs as "Adult Print Circs - H5", adult_not_a.circs as "Juvenile Non-Print Circs - H6",
  193. adult_a.circs+adult_not_a.circs as "Total Adult Circs - H7"
  194. FROM (
  195. SELECT COUNT(circ.id) AS circs, org2.shortname AS shortname
  196. FROM action.circulation circ
  197. JOIN actor.org_unit org ON org.id = circ.circ_lib
  198. JOIN actor.org_unit org2 ON org2.id = org.parent_ou
  199. JOIN asset.copy copy ON copy.id = circ.target_copy
  200. JOIN asset.call_number call ON call.id = copy.call_number
  201. join asset.copy_location acl on acl.id = copy.location
  202. LEFT OUTER JOIN metabib.real_full_rec meta ON meta.record = call.record
  203. WHERE date(circ.xact_start) >= '2014-07-01' AND date(circ.xact_start) <= '2015-06-30'
  204. AND meta.tag = 'LDR'
  205. AND SUBSTRING(meta.VALUE FROM 7 FOR 1) = 'a'
  206. and ( acl.name ilike '%juv%' or acl.name ilike '%young%' )
  207. GROUP BY 2
  208. ) juv_a
  209. join (
  210. SELECT COUNT(circ.id) AS circs, org2.shortname AS shortname
  211. FROM action.circulation circ
  212. JOIN actor.org_unit org ON org.id = circ.circ_lib
  213. JOIN actor.org_unit org2 ON org2.id = org.parent_ou
  214. JOIN asset.copy copy ON copy.id = circ.target_copy
  215. JOIN asset.call_number call ON call.id = copy.call_number
  216. join asset.copy_location acl on acl.id = copy.location
  217. LEFT OUTER JOIN metabib.real_full_rec meta ON meta.record = call.record
  218. WHERE date(circ.xact_start) >= '2014-07-01' AND date(circ.xact_start) <= '2015-06-30'
  219. AND meta.tag = 'LDR'
  220. AND SUBSTRING(meta.VALUE FROM 7 FOR 1) = 'a'
  221. and ( acl.name not ilike '%juv%' or acl.name not ilike '%young%' )
  222. GROUP BY 2
  223. ) adult_a on adult_a.shortname = juv_a.shortname
  224. join (
  225. SELECT COUNT(circ.id) AS circs, org2.shortname AS shortname
  226. FROM action.circulation circ
  227. JOIN actor.org_unit org ON org.id = circ.circ_lib
  228. JOIN actor.org_unit org2 ON org2.id = org.parent_ou
  229. JOIN asset.copy copy ON copy.id = circ.target_copy
  230. JOIN asset.call_number call ON call.id = copy.call_number
  231. join asset.copy_location acl on acl.id = copy.location
  232. LEFT OUTER JOIN metabib.real_full_rec meta ON meta.record = call.record
  233. WHERE date(circ.xact_start) >= '2014-07-01' AND date(circ.xact_start) <= '2015-06-30'
  234. AND meta.tag = 'LDR'
  235. AND SUBSTRING(meta.VALUE FROM 7 FOR 1) != 'a'
  236. and ( acl.name ilike '%juv%' or acl.name ilike '%young%' )
  237. GROUP BY 2
  238. ) juv_not_a on juv_not_a.shortname = juv_a.shortname
  239. join (
  240. SELECT COUNT(circ.id) AS circs, org2.shortname AS shortname
  241. FROM action.circulation circ
  242. JOIN actor.org_unit org ON org.id = circ.circ_lib
  243. JOIN actor.org_unit org2 ON org2.id = org.parent_ou
  244. JOIN asset.copy copy ON copy.id = circ.target_copy
  245. JOIN asset.call_number call ON call.id = copy.call_number
  246. join asset.copy_location acl on acl.id = copy.location
  247. LEFT OUTER JOIN metabib.real_full_rec meta ON meta.record = call.record
  248. WHERE date(circ.xact_start) >= '2014-07-01' AND date(circ.xact_start) <= '2015-06-30'
  249. AND meta.tag = 'LDR'
  250. AND SUBSTRING(meta.VALUE FROM 7 FOR 1) != 'a'
  251. and ( acl.name not ilike '%juv%' or acl.name not ilike '%young%' )
  252. GROUP BY 2
  253. ) adult_not_a on adult_not_a.shortname = juv_a.shortname
  254. ;
  255. */
  256.  
  257.  
  258. /*
  259.  
  260. Interlibrary Loans
  261. H14 Provided to another library__________________________
  262. H15 Received from another library__________________________
  263.  
  264. */
  265.  
  266. /*
  267. -- borrowers at other libraries, these are like reciprocal borrowers
  268. select parent.shortname as "Borrowing Library", count(circ.id) as "circs" from action.circulation circ
  269. join actor.usr au on au.id = circ.usr
  270. join actor.org_unit aou on aou.id = au.home_ou
  271. join actor.org_unit parent on parent.id = aou.parent_ou
  272. join actor.org_unit aou2 on aou2.id = circ.circ_lib
  273. join actor.org_unit parent2 on parent2.id = aou2.parent_ou
  274. WHERE date(circ.xact_start) >= '2014-07-01' AND date(circ.xact_start) <= '2015-06-30' and parent.id != parent2.id
  275. group by 1 order by 1
  276. ;
  277. */
  278.  
  279. select loaners.shortname, loaners.loans as "Provided to another library - H14", borrowers.borrowers as "Received from another library - H15"
  280. from ( SELECT copyparent.shortname, COUNT(circ.id) as "loans"
  281. FROM ACTION.circulation circ
  282. JOIN asset.COPY ac ON ac.id = circ.target_copy
  283. JOIN actor.org_unit copychild ON copychild.id = ac.circ_lib
  284. JOIN actor.org_unit copyparent ON copyparent.id = copychild.parent_ou
  285. JOIN actor.org_unit circchild ON circchild.id = circ.circ_lib
  286. JOIN actor.org_unit circparent ON circparent.id = circchild.parent_ou
  287. WHERE copyparent.id != circparent.id AND date(circ.xact_start) >= '2014-07-01' AND date(circ.xact_start) <= '2015-06-01'
  288. GROUP BY 1
  289. ) loaners
  290. join (
  291. SELECT circparent.shortname, COUNT(circ.id) as "borrowers"
  292. FROM ACTION.circulation circ
  293. JOIN asset.COPY ac ON ac.id = circ.target_copy
  294. JOIN actor.org_unit copychild ON copychild.id = ac.circ_lib
  295. JOIN actor.org_unit copyparent ON copyparent.id = copychild.parent_ou
  296. JOIN actor.org_unit circchild ON circchild.id = circ.circ_lib
  297. JOIN actor.org_unit circparent ON circparent.id = circchild.parent_ou
  298. WHERE copyparent.id != circparent.id AND date(circ.xact_start) >= '2014-07-01' AND date(circ.xact_start) <= '2015-06-01'
  299. GROUP BY 1
  300. ) borrowers on borrowers.shortname = loaners.shortname
  301. order by 1
  302. ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement